如果我写这样的东西:
var a = 1;
function lol(){
console.log(a);
}
lol();
它按预期输出1,因为我在全局范围中初始化了a=1。所以我认为在函数中,它也初始化了它的值。但当我写这样的东西时:
var a = 1;
function lol(){
var a = a + a;
console.log(a);
}
lol();
它输出NaN,这让我很困惑,因为我认为变量已经在全局范围内初始化了。
以下是我的想法,不知道它是否正确,所以我想问:我认为像var/lit/const这样的关键词,每次提到它,都会重新初始化变量,或者什么?由于第二个var在块范围内,因此当与var一起提及时,变量a再次初始化,因此变为未定义,输出NaN。
我说得对吗?请帮忙。
初始化变量,然后只使用相同的变量
var a = 1;
function lol(){
a = a + a;
console.log(a);
}
lol();
在语句var a = a + a;
中,您定义了完全不同的变量,这些变量在算术运算之前没有初始化,因此NaN
编译器声明了另一个同名的变量a
可能是因为吊装的缘故。请参阅https://developer.mozilla.org/en-US/docs/Glossary/Hoisting#var_hoisting
根据MDN、
JavaScript提升是指在执行代码之前,解释器将函数、变量或类的声明移动到其作用域的顶部的过程。