Javascript中的let变量会发生什么变化?
我执行了以下代码,发现我无法在全局范围内始终访问变量Javascript中的let变量会发生什么变化?,javascript,ecmascript-6,Javascript,Ecmascript 6,我执行了以下代码,发现我无法在全局范围内始终访问变量 console.log(b); let b = 1; VM12265:1 Uncaught ReferenceError: b is not defined at <anonymous>:1:13 (anonymous) @ VM12265:1 let b = 1; console.log(b); VM12318:1 Uncaught SyntaxError: Identifier 'b' has already bee
console.log(b); let b = 1;
VM12265:1 Uncaught ReferenceError: b is not defined
at <anonymous>:1:13
(anonymous) @ VM12265:1
let b = 1; console.log(b);
VM12318:1 Uncaught SyntaxError: Identifier 'b' has already been declared
at <anonymous>:1:1
(anonymous) @ VM12318:1
console.log(b);
VM12368:1 Uncaught ReferenceError: b is not defined
at <anonymous>:1:13
console.log(b);设b=1;
VM12265:1未捕获引用错误:未定义b
时间:1:13
(匿名)@VM12265:1
设b=1;控制台日志(b);
VM12318:1未捕获的语法错误:标识符“b”已声明
时间:1:1
(匿名)@VM12318:1
控制台日志(b);
VM12368:1未捕获引用错误:未定义b
时间:1:13
我想知道在执行步骤1和步骤2后,步骤3中的变量b发生了什么情况。我已经检查了这两种情况,它对我有效
let b = 1;
var b1 = 2;
console.log(b);
console.log(b1);
对于第一个 控制台日志(b);设b=1;VM12265:1未捕获引用错误:b为 未定义 at:1:13(匿名)@VM12265:1
Let
的绑定在初始化之前不会创建,因此不会创建引用。您访问了中的值
设b=1;控制台日志(b);VM12318:1未捕获的语法错误:标识符 “b”已被声明 at:1:1(匿名)@VM12318:1 对于第二个,如消息所示,b已经被声明。依照 如果BindingList的BoundNames包含任何 重复条目
您尚未声明变量
b
2种方式:
var
而不是let
(这是因为JS吊装)b
然后再使用let
不为全局范围定义变量。您可以在块范围的开头声明let
变量一次,并将变量设置为新值,而无需多次尝试使用let
重新声明变量以避免错误
{
让b;
试一试{
控制台日志(b);
b=1;
控制台日志(b);
b=2;
}捕捉(错误){
控制台错误(错误消息)
}
控制台日志(b);
}
让
不定义全局范围的变量。第二个和第三个变量是在同一个会话中完成的吗?这就是我想要的。谢谢分享@gurvinder372类似的参考。我想要的是步骤3的谜语,而不是步骤1