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