为什么这个函数会产生'undefined'?

use*_*935 3 javascript scope var function

这是一个非常令人困惑的行为我发现我无法弄清楚:

var foo = 'outside';

function logIt(){

   console.log(foo); 
   var foo = 'inside';

} 

logIt();
Run Code Online (Sandbox Code Playgroud)

这将产生未定义.这对我来说已经无法解释了.但陌生人是这样的:

var foo = 'outside';

function logIt(){

   console.log(foo); 

} 

logIt();
Run Code Online (Sandbox Code Playgroud)

实际上会在外面屈服.

为什么会这样?

Mat*_*ari 5

可变吊装

因为在执行任何代码之前处理变量声明(以及一般的声明),所以在代码中的任何地方声明变量等同于在顶部声明它.

因此,您的代码相当于:

var foo = 'outside';

function logIt(){
   var foo;
   console.log(foo); 
   foo = 'inside';
} 

logIt();
Run Code Online (Sandbox Code Playgroud)

在打电话的时候console.log,foo undefined.