2017-02-12 6 views
0

У меня есть этот код:Область локально определенной функции в JavaScript

sayHi() 

if (1) { 
    function sayHi() { alert(1) } 
} else { 
    function sayHi() { alert(2) } // <-- 
} 

Как это действительно работает? Функции определены в блоках if/else. Итак, как они попадают за пределы блоков if/else?

+1

Это не так. Когда я запускаю его, я получаю 'TypeError: sayHi не функция' – bejado

+0

Этот вопрос кажется очень неясным ......... –

ответ

0

Все зависит от уровня функции в Javascript, а не от уровня блока, как и для большинства других языков. Поэтому, если вы определяете var в цикле for, он «поднимается» вверху содержащей функции.

+0

Это не совсем так. Объявления 'var' и' function' являются функциями, но объявления 'let',' const' и 'class' являются блочными областями. – Frxstrem

1

Объем функции - это полная содержащая функция, потому что объявления функций поднимаются. Но функция не получает свое определение, назначенное ему, пока не будет выполнен блок if или else. Это эквивалентно:

var sayHi; 
sayHi(); 

if (1) { 
    sayHi = function() { alert(1); }; 
} else { 
    sayHi = function() { alert(2); }; 
} 
Смежные вопросы