为什么这显示出变量提升的行为?

Why is this showing a behaviour as of variable hoisting?

我就不多说了,看代码就够了:

JS:

var myvar = "my value";

(function (){
    console.log(myvar); //returning undefined
    var myvar = "local value";
})();

现在一个很简单的问题:变量myvar是在函数执行前声明的,为什么控制台显示undefined?

您有两个名为 myvar 的变量。一个在函数内,一个在函数外。

在函数内部,您可以访问在函数内部声明的函数(如您所说,已提升)。那时它还没有被赋值,所以它是 undefined.

一行之后,你给它赋值。

就像对 Quentin post 的补充。您的代码是什么样子 "post hoist":

var myvar = "my value";

(function (){
    var myvar;
    console.log(myvar); //returning undefined
    myvar = "local value";
})();

如果你这样看,很明显为什么它是未定义的。

如果您希望变量为 "My value",您可以这样做:

var myvar = "my value";

(function (myvar){
    console.log(myvar); //returning "my value"
    myvar = "local value";
})(myvar);

Fiddle