函数作用域中的变量是否像全局作用域中的变量一样被提升到开头?
Are vars in a function scope hoisted to the beginning like vars in the global scope?
我找不到明确的答案,所以我会在这里试试。
编辑:这个问题不是关于一个变量是否从它所在范围的开头可用,而是我想知道这个变量是在声明全局变量时声明的,还是在函数被调用。
考虑这个例子:
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)
我找不到明确的答案,所以我会在这里试试。
编辑:这个问题不是关于一个变量是否从它所在范围的开头可用,而是我想知道这个变量是在声明全局变量时声明的,还是在函数被调用。
考虑这个例子:
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)