JavaScript ES6中是否不使用let或const声明的变量?
我玩ES6已有一段时间了,我注意到虽然用声明的变量var
被按预期悬挂了…
console.log(typeof name); // undefinedvar name = "John";
…声明let
或const
似乎存在一些问题的变量:
console.log(typeof name); // ReferenceErrorlet name = "John";
和
console.log(typeof name); // ReferenceErrorconst name = "John";
这是否意味着使用let
或const
不声明的变量被吊起?这到底是怎么回事?是否有任何区别let
,并const
在此问题?
回答:
@thefourtheye的正确说法是在声明这些变量之前 它们。但是,这要复杂得多。
是否用
let
或const
不声明变量?这到底是怎么回事?
(var
,let
,const
,function
,function*
,class
)
在JavaScript。这意味着,如果在范围内声明了名称,则在该范围内,标识符将始终引用该特定变量:
x = "global";// function scope:
(function() {
x; // not "global"
var/let/… x;
}());
// block scope (not for `var`s):
{
x; // not "global"
let/const/… x;
}
对于函数作用域和块作用域1都是如此。
之间的差var
/ function
/ function*
声明和let
/ const
/ class
声明是
。当在范围的顶部创建绑定时,
可以使用undefined
或(生成器)函数对前者进行初始化。但是,按词法声明的变量保持
。这意味着ReferenceError
您尝试访问它时将引发异常。它只会得到当初始化let
/ const
/
class
这就是所谓的(上述)之前声明进行评估,一切 时间盲区 。
x = y = "global";(function() {
x; // undefined
y; // Reference error: y is not defined
var x = "local";
let y = "local";
}());
请注意,一条let y;
语句使用undefined
like进行了初始化let y = undefined;
。
该 时间 盲区不是语法的位置,而是 时间
的变量(范围)的创建和初始化之间。只要未执行该代码(例如,函数体或简单的死代码),就可以在声明上方的代码中引用该变量不是一个错误,并且如果在初始化之前访问变量,即使访问该变量,也会引发异常。代码位于声明下方(例如,在过早调用的提升函数声明中)。
是否有任何区别
let
,并const
在此问题?
不,就吊装而言,它们的作用相同。它们之间的唯一区别是,const
蚂蚁必须是并且只能在声明的初始化程序部分中分配(const one =
1;,const one;
以及以后的重新分配one = 2
都无效)。
1:当然,var
声明仍然仅在功能级别上起作用
以上是 JavaScript ES6中是否不使用let或const声明的变量? 的全部内容, 来源链接: utcz.com/qa/418833.html