该规范指出:
在严格模式代码中使用标识符 eval 或 arguments 作为 FunctionDeclaration 或 FunctionExpression 的标识符或形式参数名称 (13.1) 是 SyntaxError。尝试使用 Function 构造函数 (15.3.2) 动态定义此类严格模式函数将引发 SyntaxError 异常。
来源:http ://es5.github.com/C.html#C (最后一个项目符号)
因此,这会引发语法错误(在 Firefox、Chrome 和 Opera 中):
(function () {
'use strict';
var f = function ( eval ) {};
})();
现场演示:http: //jsfiddle.net/v8Ff4/
但是,这不会引发语法错误:
(function () {
'use strict';
var f = new Function( 'eval', '' );
})();
现场演示:http: //jsfiddle.net/v8Ff4/1/
据我了解,第二个代码块应该引发语法错误。应该是?如果是,为什么不呢?