Проверка на NFE
важность: 5
Каков будет результат выполнения кода?
function g() { return 1; }
alert(g);
А такого? Будет ли разница, если да – почему?
(function g() { return 1; });
alert(g);
Первый код выведет function ...
, второй – ошибку во всех браузерах, кроме IE8-.
// обычное объявление функции (Function Declaration)
function g() { return 1; };
alert(g); // функция
Во втором коде скобки есть, значит функция внутри является не Function Declaration
, а частью выражения, то есть Named Function Expression
. Его имя видно только внутри, снаружи переменная g
не определена.
// Named Function Expression!
(function g() { return 1; });
alert(g); // Ошибка!
Все браузеры, кроме IE8-, поддерживают это ограничение видимости и выведут ошибку, "undefined variable"
.