首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 暂时性死区_暂时性

今天说一说js 暂时性死区_暂时性的,希望能够帮助大家进步!!! 在Js中什么是暂时性呢? 暂时性死区是针对'const','let'这两个关键字而产生的概念。...首先变量提升这个js的基本概念无法撼动,'const'和'let'作为块级作用域也不能避免。...这个时候,对于该变量来说就是'暂时性死区',通俗来说就是该变量存在,但并未完全存在 上代码 此代码由Java架构师必看网-架构君整理 //情景一、 if (true) { // TDZ开始...console.log(tmp); // undefined tmp = 123; console.log(tmp); // 123 } 上面代码中,在let命令声明变量tmp之前,都属于变量tmp的“死区...架构师必看网-架构君整理 //情景三 // 不报错 var x = x; // 报错 let x = x; // ReferenceError: x is not defined 上面代码报错,也是因为暂时性死区

65720

JS 暂时性死区「建议收藏」

JS 暂时性死区 ES6 暂时性死区 引用 ES6 暂时性死区 只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。...这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。...“暂时性死区”也意味着 typeof 不再是一个百分之百安全的操作。...ES6 规定暂时性死区和 let、const 语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。...总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

44650
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    let暂时性死区理解「建议收藏」

    Let 中提到的暂时性死区到底是什么,它的产生原因是? ES6 规定,如果区块中存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。...这在语法上,称为“暂时性死区”,也就是说使用let声明的变量都是先声明再使用 ,不存在变量提升问题。...sdx ‘; }//报错 报错原因:在块作用域内,let声明的变量被提升,但变量只是创建被提升,初始化并没有被提升(初始化就是给变量先赋值成undefined),在初始化之前使用变量,就会形成一个暂时性死区...2.为什么let,const有暂时性死区,而var没有? 因为var有预处理机制,也就是变量提升; 声明提前指的是,不管变量被声明在函数什么位置,这些声名都会被提升至函数顶部。

    43730

    letconst 的变量提升与暂时性死区

    本文就从这一点谈起: let / const 存在变量提升(hoist)以及它们的暂时性死区(TDZ) let/const 没有变量提升的错觉 console.log(aVar); // undefined...这就引出了本文要谈的下一个概念: 暂时性死区 (TDZ) 暂时性死区 Temporal Dead Zone (TDZ) 翻译为中文即为 暂时性死区 先看一段 MDN 上关于暂时性死区的定义 let bindings...从代码块(block)起始到变量求值(包括赋值)以前的这块区域,称为该变量的暂时性死区。...图示如下: 暂时性死区深入探讨 到目前为止,我们对暂时性死区的理解已经够用了,下面是从 ECMA262 let/const 标准 层面来再稍微深入的探讨一下这个问题。...…but may not be accessed in any way until the variable’s LexicalBinding is evaluated… 这其实揭示了暂时性死区的原理

    45810

    理解es6中的暂时性死区

    全局作用域 JS中没有明确的全局作用域的概念,只有局部作用域以及全局执行环境的概念,全局执行环境被认为是window对象,是最外围的一个执行环境。...if (true) { const MAX = 5; } MAX // Uncaught ReferenceError: MAX is not defined 暂时性死区 暂时性死区就是由于,let...这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。 有些“死区”比较隐蔽,不太容易发现。...这说明默认赋值有可能导致暂时性死区 我看到网上有一个说法说,上面的代码出现暂时性死区的原因是因为,函数参数的默认赋值,其实是用let声明的 即等价于下面的代码 function bar(let x...所以暂时性死区的现象,其实是在构建AO时,找y给x赋值,因为找不到y,所以出错了。

    81610

    Js篇-面试13-var let const 的区别以及暂时性死区

    然后在赋值,只能在块作用域里访问,而且不能修改 let 和 var 的不同是,在变量声明之前就访问变量的话,会直接提示 ReferenceError,而不像 var 那样使用默认值 undefined 什么是暂时性死区...如果区块(花括号)中存在let命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域,凡是在声明之前就使用这些变量,就会报错,所以在代码块内,使用let命令声明变量之前,该变量都是不可用的 这被称为暂时性死区...Uncaught ReferenceError:sName is not defined let sName = 'itclan'; } 当前作用域顶部到该变量声明位置中间的部分,都是该let变量的死区...,在死区中,禁止访问该变量 所谓暂时性死区,就是具有块级作用域,变量需要先声明,然后在使用,否则的话,就会报错,即使用typeof检测一个变量,会报错ReferenceError typeof sName

    88310

    了解下es6中的let、const暂时性死区

    关于TDZ(暂时性死区)的小知识 es6示例代码 es6中,下面的代码执行后会报ReferenceError: a is not defined的错误 let a = 'global' { console.log...defined let a = 1 } 原因: console.log(a) 中的 a 指的是下面的 a,而不是全局的 a 执行 log 时 a 还没「初始化」,所以不能使用(也就是所谓的暂时死区...因此,在这运行流程进入作用域创建变量,到变量可以被访问之间的这一段时间,就称之为暂时死区。 let/const 命令会使区块形成封闭的作用域。若在声明之前使用变量,就会报错。...语法上称为 “暂时性死区”( temporal dead zone) advice 所以这就促使我们养成良好的编程习惯,变量一定要先声明后使用。

    40420

    了解一下什么是ES6的“暂时性死区”!

    今天看阮一峰老师的ES6的时候看到这块内容,觉得还是很不错的,可能是很多人的技术盲点,也是我众多盲点中的一个,就抽取一部分转载一下,原文出处: 阮一峰老师讲let 暂时性死区 只要块级作用域内存在let...这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。...“暂时性死区”也意味着typeof不再是一个百分之百安全的操作。...ES6 规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。...总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

    1.8K20

    ES6之块级作用域

    但是,是不是真的提升就不存在了呢,可以看下面暂时性死区这部分。...给对象增加属性不会导致 obj 的指针变化,所以不会报错 const obj = { foo: 2 }; obj.bar = 3; console.log(obj); // {foo: 2, bar: 3} 暂时性死区...not defined 报的错是 ReferenceError,如果使用 var 声明的话,temp 输出应该是 undefined,从 let 声明的变量的块的第一行,到声明变量之间的这个区域被称作暂时性死区...事实上,当 JS 引擎检视下面的代码块有变量声明时,对于 var 声明的变量,会将声明提升到函数或全局作用域的顶部,而对 let 或 const 的时候会将声明放在暂时性死区内。...任何在暂时性死区内访问变量的企图都会导致“运行时”错误(runtime error)。只有执行到变量的声明语句时,该变量才会从暂时性死区内被移除并可以安全使用。

    59340

    var let 以及 const区别和用法(详解)

    var name="cht"; // 常用 this.name window.name let age = 15 window.age // undefined 复制代码 5.暂时性死区...TDZ TDZ又称暂时性死区,意思是变量在作用域内已经存在,必须在 let / const声明后面使用。...fn(null , "arg2") //null,arg2 fn(undefined, "arg2") // 报错 复制代码 这里涉及到null和undefined区别 ES6 规定暂时性死区和...let的以上特性,为js新增了块级作用域 以前为了防止变量被污染,我们常使用自执行函数(IIFE)来防止变量被污染 ,当let广泛使用时,IIFE将不在必要 !..."; console.log(obj.name) // hw 复制代码 const 的作用域与let命令相同,只在声明所在的块级作用域内有效 const声明的变量也不存在变量提升,同样存在暂时性死区

    68800

    前端面试题:JS中的let和var的区别

    它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效,而且有暂时性死区的约束。...ES6可以用let定义块级作用域变量 在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。...JS中的for循环体比较特殊,每次执行都是一个全新的独立的块作用域,用let声明的变量传入到 for循环体的作用域后,不会发生改变,不受外界的影响。...}, 0); } // 输出结果: 0 1 2 3 4 5 6 7 8 9 let没有变量提升与暂时性死区 用let声明的变量,不存在变量提升。...这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。 let变量不能重复声明 let不允许在相同作用域内,重复声明同一个变量。

    1.4K100

    ES6常用新特性学习1-let和const

    = 2; // let 的情况 console.log(bar); // Uncaught ReferenceError: bar is not defined let bar = 2; 2.2 暂时性死区...这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。...还有如下情况: // 不报错 var x = x; // 报错 let x = x; // ReferenceError: x is not defined ES6 规定暂时性死区和let、const...总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。...SyntaxError: Missing initializer in const declaration const的作用域与let命令相同:只在声明所在的块级作用域内有效,其声明的常量也是不提升,同样存在暂时性死区

    45220
    领券