With let
vs. var
我了解到主要区别在于 let 变量的作用域为最近的块并且不会被提升。也让变量可以重新赋值,但不能在同一作用域内重新声明。那么为什么这段代码会返回“未定义”错误呢?
let x = 10;
if (true) {
console.log(x);
let x = 11;
}
returns:
Uncaught ReferenceError: x is not defined(…)
While:
let x = 10;
if (true) {
console.log(x);
}
logs 10
没有错误?
之间的主要区别var
and let
就是它:
var
被提升到包装纸上function
block.
let
被提升到包装纸上{}
block
第二个代码示例没有与第一个相同的引用冲突,因为您声明x
在下面引用它之前if
block.
EDIT针对 Pointy 的评论如下:
你正在经历ReferenceError
因为颞死区
如果您引用由以下方式定义的变量let
在定义之前的同一块中,您将收到此错误。
来自MDNlet Docs
在 ECMAScript 2015 中,let 会将变量提升到块的顶部。但是,在变量声明之前引用块中的变量会导致引用错误。从块开始到处理声明为止,变量处于“临时死区”。
function do_something() {
console.log(foo); // ReferenceError
let foo = 2;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)