2016-02-28 1 views

ответ

2

Вы определяете выражение функции с немедленным вызовом (IIFE), которое называется f. В области 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