簡體   English   中英

Java語言吊裝-David Shariff測驗

[英]Javascript hoisting - David Shariff quiz

問題是,以下警報將是什么:

function bar() {
    return foo;
    foo = 10;
    function foo() {}
    var foo = '11';
}
alert(typeof bar());

答案是功能。

我的問題:

  1. bar()不會被其返回值取代嗎? 如果沒有,為什么?
  2. foo = 10嗎? 被吊在頂部? (吊裝)

您可以這樣看:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM