0
(function f(){
function f(){ return 0; }
console.log(f());
function f(){ return 1; }
})();
爲什麼上面的代碼給我1作爲結果?JavaScript中的懸浮變量
(function f(){
function f(){ return 0; }
console.log(f());
function f(){ return 1; }
})();
爲什麼上面的代碼給我1作爲結果?JavaScript中的懸浮變量
您可以定義一個名爲f
的立即調用函數表達式(IIFE)。在IIFE的範圍內,您可以定義兩個函數f
。由於hoisting這兩個函數聲明將在範圍的頂部移動,而後者f
將覆蓋第一個f
聲明。
(function f(){
function f(){ return 0; }
function f(){ return 1; }
console.log(f());
})();
的IIFE是完全不相干的在這裏,在JavaScript函數和變量懸掛,這就是爲什麼你可以做
hoisted(); // logs "foo"
function hoisted() {
console.log("foo");
}
,你調用該函數:
提升內部功能後在它被定義之前。
在您的示例代碼,懸掛後,最終被
function f(){ return 0; }
function f(){ return 1; }
console.log(f()); // logs "1"
[........提升!(https://developer.mozilla.org/ EN-US /文檔/詞彙/起重) – adeneo