问题是,以下警告会是什么:
function bar() {
return foo;
foo = 10;
function foo() {}
var foo = '11';
}
alert(typeof bar());
答案是,功能。
我的问题:
答案 0 :(得分:6)
你可以这样看:
function bar() {
var foo = function() {};
return foo; // function ends here
foo = 10;
foo = '11';
}
其他两个作业陈述没有发生。
答案 1 :(得分:5)
JavaScript中只提升声明。
对于function
声明,包括它们的整个语句体(在foo
的情况下为空)。但是,对于var
s,分配不被视为声明的一部分,并将保留在声明所在的位置。 (2)
对于引擎,bar()
似乎是:
function bar() {
// hoisted
function foo() {}
var foo; // no-op, `foo` was already declared by `function foo() {}`
// remaining statements
return foo;
// unreachable code following a `return`
foo = 10;
foo = '11'; // separated from `var foo;`
}
结果typeof
为function
是指function foo() {}
的类型,bar()
返回的引用。 (1)
alert(bar().toString()); // "function foo() {}"