Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的提升变量_Javascript - Fatal编程技术网

JavaScript中的提升变量

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

我知道变量的提升是用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 undefined

正如javascript所做的那样,根据我的理解,第二个函数也应该打印2。buy为什么不打印呢

do_something() {
 var foo;
 console.log(foo); // undefined
 foo = 2;
}

do_something();

所以它正在打印
未定义的
。这是变量提升的基础。您的声明将移到顶部,您的分配将保持在同一位置。当您使用
let
over
var

Javascript只提升声明,而不是初始化时,情况就不同了

var x = y, y = 'A';
console.log(x + y); // undefinedA
在这里,x和y是在执行任何代码之前声明的,赋值发生在后面。在计算
“x=y”
时,
y
存在,因此不会抛出
ReferenceError
,其值为
“未定义”
。因此,
x
被分配了未定义的值。然后,
y
被赋值为
'a'
。因此,在第一行之后,
x===undefined&&y====A'
,因此得到结果


第二个函数输出未定义的
,因为您在调用变量后设置了该变量。您编写的代码是同步的,这意味着解释器逐行读取代码,并按顺序执行。如果在调用变量之前未定义该变量,控制台将输出
未定义的


只有声明被挂起,对变量的任何赋值始终保持其原始位置。

只有声明被挂起。分配的变量未被提升。你也是