功能范围内的变量是否像全球范围内的变量一样悬而未决?

问题描述 投票:0回答:1

我无法找到明确的答案,所以我会在这里试一试。

编辑:这个问题不是关于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不能从全局范围访问,但我很好奇这里发生了什么事情。

提前致谢

javascript hoisting
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.