函数范围内的var是否像全局范围内的var一样被吊起?

时间:2019-03-15 13:29:31

标签: javascript hoisting

我找不到清晰的答案,所以我将在这里尝试。

编辑:这个问题不是关于是否可以从它所在的作用域的开始使用var,而是我想知道是否在声明全局var或函数时声明了var。叫。

考虑以下示例:

var a = "foo";
function xyz(){
    var b = "bar";
}
xyz();

当我运行这段代码时,var b会被悬挂在哪里?

会是:

declare function xyz
declare var a
assign value "foo" to var a
execute xyz()
>> declare var b
assign value "bar" to var b

或者是:

declare function xyz
declare var a
>> declare var b
assign value "foo" to var a
execute xyz()
assign value "bar" to var b

我知道无法从全局范围访问var b,但我很好奇这里发生的顺序。

预先感谢

1 个答案:

答案 0 :(得分:2)

变量b在执行xyz()时初始化,在解释过程中不初始化。

function host() {
  var b;
}
var a;

var aIsDeclared = true; 
var bIsDeclared = true; 

try{ a; }
catch(e) {
    if(e.name == "ReferenceError") {
        aIsDeclared = false;
    }
}

try{ b; }
catch(e) {
    if(e.name == "ReferenceError") {
        bIsDeclared = false;
    }
}

console.log("a is declared : ", aIsDeclared)
console.log("b is declared : ", bIsDeclared)