我找不到清晰的答案,所以我将在这里尝试。
编辑:这个问题不是关于是否可以从它所在的作用域的开始使用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,但我很好奇这里发生的顺序。
预先感谢
答案 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)