我执行了以下代码,发现我无法在全局范围内一直访问该变量。
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
我想知道在执行第1步和第2步后第3步中变量b发生了什么。
答案 0 :(得分:2)
对于第一个
的console.log(B);设b = 1; VM12265:1未捕获的ReferenceError:b是 没有定义的 at:1:13(匿名)@ VM12265:1
Let
绑定在初始化之前不会创建,因此不会创建任何引用。您访问了temporal zone
设b = 1;的console.log(b)中; VM12318:1未捕获的SyntaxError:标识符 &#39; B&#39;已经宣布 at:1:1(匿名)@ VM12318:1
对于第二个,如消息所示, b已经声明。根据{{3}}
如果BindingList的 BoundNames包含any,则为语法错误 重复条目。
答案 1 :(得分:1)
let
未定义全局范围的变量。您可以在块作用域的开头声明let
变量一次,并将变量设置为新值,而不必尝试使用let
多次重新声明变量以避免错误
{
let b;
try {
console.log(b);
b = 1;
console.log(b);
b = 2;
} catch (err) {
console.error(err.message)
}
console.log(b);
}
&#13;
答案 2 :(得分:0)
您尚未声明变量b
2种方式:
使用var
代替let
(这是因为JS吊装)
首先声明b
然后在
答案 3 :(得分:-1)
我已经检查了它为我工作的两种情况。你可以在你写的地方分享完成你的代码吗?
let b = 1;
var b1 = 2;
console.log(b);
console.log(b1);