使用let
与var
我了解到主要区别在于,变量的范围限定为最近的块并且不会被提升。也可以让变量重新分配,但不能在同一范围内重新声明。为什么这段代码会返回"未定义"错误?
let x = 10;
if (true) {
console.log(x);
let x = 11;
}
返回:
Uncaught ReferenceError: x is not defined(…)
while:
let x = 10;
if (true) {
console.log(x);
}
记录10
没有错误?
答案 0 :(得分:0)
var
和let
之间的主要区别在于:
var
被提升到包裹function
块。
let
被提升到包裹{}
块
第二个代码示例与第一个代码示例没有相同的参考冲突,因为您在以下x
块中引用if
之前声明ReferenceError
。
编辑要在下面发表Pointy的评论:
由于时间死区,您正在体验let
如果在定义之前在同一个块中引用function do_something() {
console.log(foo); // ReferenceError
let foo = 2;
}
定义的变量,则会收到此错误。
来自MDN
let
文档在ECMAScript 2015中,让我们将变量提升到块的顶部。但是,在变量声明之前引用块中的变量会导致ReferenceError。变量位于"临时死区"从块的开始直到处理声明。
import os i = 0 while i < 2: os.pause(4) os.system("home/Tyler/desktop/test.py") i += 1
答案 1 :(得分:-1)
let
变量实际上已被提升(在块内)。来自MDN:
在ECMAScript 2015中,让我们将变量提升到块的顶部。