вернуться к уроку

Проверка на 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".