Почему этот код выдает ошибку?
// global non-strict code
(function eval () { 'use strict'; });
Live demo: http://jsfiddle.net/SE3eX/1/
Итак, что мы имеем здесь, это именованное функциональное выражение. Я хотел бы прямо указать, что это выражение функции появляется в нестандартном коде. Как вы можете видеть, его тело функции является строгим кодом.
Правила строгого режима находятся здесь: http://ecma-international.org/ecma-262/5.1/#sec-C
Соответствующая марка - это одна (последняя в списке):
Это SyntaxError для использования в строгом режиме кода идентификаторы eval или аргументы как идентификатор FunctionDeclaration или FunctionExpression или как формальное имя параметра (13.1). Попытка динамически определить такую строгую функцию режима с помощью конструктора Function (15.3.2) вызовет исключение SyntaxError.
Обратите внимание, что это правило применяется только в том случае, если само выражение/выражение функции отображается в строгом коде, чего нет в моем примере выше.
Но он все еще выдает ошибку? Почему?