Каков будет результат выполнения кода? Почему?
(function g() { return 1; });
alert(g);
Решение
Решение
Ответ: ошибка везде кроме IE<9:
Начнем со скобок. Если бы их вокруг function не было, то результат был бы очевиден: код функции.
// обычное объявление функции (Function Declaration)
function g() { return 1; };
alert(g);
..Но скобки есть, и это даёт ошибку при alert(g):
(function g() { return 1; }); // Named Function Expression!
alert(g);
Ключ к решению — понимание, что функция в скобках (function ... ) являтся Function Expression, а значит у нас есть Named Function Expression, имя которого g видно только внутри функции.
Все браузеры, кроме IE<9 поддерживают это ограничение видимости и выведут ошибку ‘undefined variable’.
#169