JavaScript中的提升变量
我知道变量的提升是用Java脚本完成的。我无法理解为什么它输出为未定义JavaScript中的提升变量,javascript,Javascript,我知道变量的提升是用Java脚本完成的。我无法理解为什么它输出为未定义 do_something() { var foo = 2; console.log(foo); } do_something() // it prints 2 do_something() { console.log(foo); var foo = 2; } do_something() // it prints un
do_something()
{
var foo = 2;
console.log(foo);
} do_something() // it prints 2
do_something()
{
console.log(foo); var foo = 2;
} do_something() // it prints undefined
正如javascript所做的那样,根据我的理解,第二个函数也应该打印2。buy为什么不打印呢
do_something() {
var foo;
console.log(foo); // undefined
foo = 2;
}
do_something();
所以它正在打印
未定义的。这是变量提升的基础。您的声明将移到顶部,您的分配将保持在同一位置。当您使用let
overvar
Javascript只提升声明,而不是初始化时,情况就不同了
var x = y, y = 'A';
console.log(x + y); // undefinedA
在这里,x和y是在执行任何代码之前声明的,赋值发生在后面。在计算“x=y”
时,y
存在,因此不会抛出ReferenceError
,其值为“未定义”
。因此,x
被分配了未定义的值。然后,y
被赋值为'a'
。因此,在第一行之后,x===undefined&&y====A'
,因此得到结果
第二个函数输出未定义的
,因为您在调用变量后设置了该变量。您编写的代码是同步的,这意味着解释器逐行读取代码,并按顺序执行。如果在调用变量之前未定义该变量,控制台将输出未定义的
只有声明被挂起,对变量的任何赋值始终保持其原始位置。只有声明被挂起。分配的变量未被提升。你也是