ES6语法—var 和 let 的区别
当我们在函数外部定义变量时,这些var变量属于全局范围。例如:
在本例中,counter是一个全局变量。这意味着该counter变量可以被任何函数访问。
在这个例子中,counter变量是increase()函数的局部变量。它不能在函数之外访问。
以下示例在循环内显示从 0 到 4 的四个数字,在循环外显示数字 5。
输出:
在此示例中,i变量是全局变量。因此,可以从循环内部和for循环之后访问它。
以下示例使用let关键字而不是var关键字:
在这种情况下,代码在循环中显示了从 0 到 4 的四个数字和一个引用错误:
错误:
由于此示例使用let关键字,因此该变量i是阻塞范围。这意味着该变量i仅存在并且可以在for循环块内访问。
在 JavaScript 中,一个块由一对花括号分隔,{}就像在if...elseandfor语句中一样:
全局var变量作为属性添加到全局对象中。全局对象位于Web 浏览器和Node.js 上:windowglobal
但是,let变量不会添加到全局对象中:
let 变量有时间死区,而 var 变量没有。为了理解时间死区,让我们检查一下 var 和 let 变量的生命周期,它们有两个步骤:创建和执行。
var 变量
在创建阶段,JavaScript 引擎将存储空间分配给 var 变量,并立即将它们初始化为 undefined。
在执行阶段,JavaScript 引擎将分配指定的值分配给 var 变量(如果有的话)。否则, var 变量保持未定义。
有关详细信息,请参阅执行上下文。
let变量
在创建阶段,JavaScript 引擎为 let 变量分配存储空间,但不初始化变量。引用未初始化的变量将导致 ReferenceError。
let 变量与 var 变量具有相同的执行阶段。