对吊装感到困惑

dub*_*ech 3 javascript hoisting

考虑这两个不同版本的吊装......

mylocation = "dublin" 
function outputPosition() {
    alert(mylocation);
    mylocation = "fingal" ;
    alert(mylocation);
}
outputPosition();
Run Code Online (Sandbox Code Playgroud)

这将输出"fingal"然后"fingal"

mylocation = "dublin" 
function outputPosition() {
    alert(mylocation);
    var mylocation = "fingal" ;
    alert(mylocation);
}
outputPosition();
Run Code Online (Sandbox Code Playgroud)

这将输出"undefined"和"fingal"

为什么?

ali*_*ona 6

一旦你var在javascript函数中使用关键字声明变量,无论你在哪里放置这个声明 - 在函数的顶部或在buttom,它将被视为局部变量.这就是为什么undefined当你在var声明之前尝试获得这样的变量的值时你得到的原因.


gdo*_*ica 5

在第二个选项中,您mylocation通过var声明隐藏(我希望在外部范围中声明.)一个新变量.

"在JavaScript中,变量可以在使用后声明." 含义:JavaScript将var声明提取到作用域的顶部(无论它在何处声明!),因此在第二个函数var mylocation中隐式定义但未在第一个警报之前分配,因此它undefined在该点输出.