2016-02-28 46 views
0
(function f(){ 
    function f(){ return 0; } 
    console.log(f()); 
    function f(){ return 1; } 
})(); 

爲什麼上面的代碼給我1作爲結果?JavaScript中的懸浮變量

+0

[........提升!(https://developer.mozilla.org/ EN-US /文檔/詞彙/起重) – adeneo

回答

2

您可以定義一個名爲f的立即調用函數表達式(IIFE)。在IIFE的範圍內,您可以定義兩個函數f。由於hoisting這兩個函數聲明將在範圍的頂部移動,而後者f將覆蓋第一個f聲明。

(function f(){ 
    function f(){ return 0; } 
    function f(){ return 1; } 
    console.log(f()); 
})(); 
0

的IIFE是完全不相干的在這裏,在JavaScript函數和變量懸掛,這就是爲什麼你可以做

hoisted(); // logs "foo" 

function hoisted() { 
    console.log("foo"); 
} 

,你調用該函數:

提升內部功能後在它被定義之前。
在您的示例代碼,懸掛後,最終被

function f(){ return 0; } 
    function f(){ return 1; } 

    console.log(f()); // logs "1" 

Hoisting on MDN