问题是,以下警告会是什么:
function bar() {
return foo;
foo = 10;
function foo() {}
var foo = '11';
}
alert(typeof bar());
Run Code Online (Sandbox Code Playgroud)
答案是,功能.
我的问题:
你可以这样看待它:
function bar() {
var foo = function() {};
return foo; // function ends here
foo = 10;
foo = '11';
}
Run Code Online (Sandbox Code Playgroud)
其他两个赋值语句没有发生.
只有声明在JavaScript中提升.
对于function声明,包括它们的整个语句体(在其情况下为空foo).但是,对于vars,分配不被视为声明的一部分,并将保留在声明的位置.(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;`
}
Run Code Online (Sandbox Code Playgroud)
将所得typeof的存在function指的是的类型function foo() {},提及这就是bar()返回.(1)
alert(bar().toString()); // "function foo() {}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |