Javascript 什么意思是让声明被挂起而不是初始化?
我知道下面的代码片段会导致ReferenceError:Javascript 什么意思是让声明被挂起而不是初始化?,javascript,var,let,Javascript,Var,Let,我知道下面的代码片段会导致ReferenceError: console.log(b); let b = 3; 我已经读到,如果我们使用var而不是let, ,声称let声明也被提升,但它们未初始化 让我困惑的是,初始化,当我们谈论引用错误时,它又有什么关系呢 在下面的代码中 let b; console.log(b); b = 3; 初始化是在console.log(b)之后写入的,但这不会产生任何引用错误,因此说在第一个代码段中抛出异常是没有意义的,因为变量没有初始化 谁能澄清一下这些事
console.log(b);
let b = 3;
我已经读到,如果我们使用var
而不是let
,,声称let声明也被提升,但它们未初始化 让我困惑的是,初始化,当我们谈论引用错误时,它又有什么关系呢 在下面的代码中
let b;
console.log(b);
b = 3;
初始化是在console.log(b)
之后写入的,但这不会产生任何引用错误,因此说在第一个代码段中抛出异常是没有意义的,因为变量没有初始化
谁能澄清一下这些事情吗
如果在初始化之前访问let
(和const
)声明,将抛出错误
这是什么意思?
如果在程序到达声明行之前尝试访问变量,将出现错误:
试试看{
控制台日志(b)
}捕获(e){
console.error(e)//ReferenceError
}
让b//b在这里初始化(b==未定义)
console.log(b)//未定义
b=3//用3重新分配b
console.log(b)//3
即使let
缺少=value
部分,初始化也会发生,在这种情况下,值未定义,因此它不会再抛出错误
这就是为什么不能从const
声明中省略=value
部分的原因:它将使用未定义的初始化,以后无法重新分配
还请注意这种错误与尝试访问未定义变量时的错误不同:即使变量已定义(在另一个范围内),也会引发前者:
设b=1
console.log(b)//1
{
//不同范围
试一试{
控制台日志(b)
}捕获(e){
console.error(e)//ReferenceError:内部b与外部b形成阴影,但尚未初始化
}
设b=2
console.log(b)//2
}
不要挂起声明-哦,等等,它们是(根据该链接)。。。但不是以同样的方式。。。它们位于范围块顶部和声明实际所在位置之间的时间死区中。。。要阻止您执行第一个示例中的操作:轻拍let b所在的行代码>是,它将被初始化。如果它的右边没有=
,未定义的
将被分配给它-访问未定义的
不会抛出,访问尚未初始化的变量是完全不同的事情,并且会抛出