为什么这表现出变量提升的行为?

时间:2016-02-15 16:14:51

标签: javascript hoisting

我不会说什么,只看一下代码就足够了:

JS:

var myvar = "my value";

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

现在一个非常简单的问题:变量myvar是在执行函数之前声明的,那么为什么控制台显示未定义?

2 个答案:

答案 0 :(得分:3)

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

在函数内部,您可以访问函数内声明的函数(正如您所说,它已被挂起)。此时尚未为其分配值,因此它为undefined

之后一行,你给它分配一个值。

答案 1 :(得分:0)

正如Quentin的帖子一样。您的代码看起来像“post hoist”:

var myvar = "my value";

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

如果以这种方式看待它,很明显为什么它是未定义的。

如果您希望变量为“我的值”,则可以这样做:

var myvar = "my value";

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

Fiddle