我无法找到明确的答案,所以我会在这里试一试。
编辑:这个问题不是关于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不能从全局范围访问,但我很好奇这里发生了什么事情。
提前致谢
当你执行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)