仕様には次のように記載されています。
厳密モード コード内で識別子 eval または引数を 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/
この 2 番目のコード ブロックが構文エラーをスローする必要があることを理解しています。それはすべきですか?はいの場合、なぜそうしないのですか?