[英]Javascript hoisting - David Shariff quiz
問題是,以下警報將是什么:
function bar() {
return foo;
foo = 10;
function foo() {}
var foo = '11';
}
alert(typeof bar());
答案是功能。
我的問題:
您可以這樣看:
function bar() {
var foo = function() {};
return foo; // function ends here
foo = 10;
foo = '11';
}
其他兩個賦值語句沒有發生。
JavaScript僅懸掛聲明。
對於function
聲明,包括它們的整個語句主體(在foo
的情況下為空)。 但是,對於var
,分配不被視為聲明的一部分,而是保留在放置語句的位置。 (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()
返回的是對該function foo() {}
的引用。 (1)
alert(bar().toString()); // "function foo() {}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.