new Function
再利用可能な関数を作成します。 eval
与えられた文字列を実行し、最後のステートメントの結果を返すだけです。Functionを使用してevalをエミュレートするラッパー関数を作成しようとしたため、あなたの質問は見当違いです。
彼らがカーテンの後ろでいくつかのコードを共有しているのは本当ですか?はい、そうです。まったく同じコードですか?いいえ、確かに。
楽しみのために、関数を作成するためにevalを使用する私の独自の不完全な実装を示します。それが違いを明らかにすることを願っています!
function makeFunction() {
var params = [];
for (var i = 0; i < arguments.length - 1; i++) {
params.push(arguments[i]);
}
var code = arguments[arguments.length - 1];
// Creates the anonymous function to be returned
// The following line doesn't work in IE
// return eval('(function (' + params.join(',')+ '){' + code + '})');
// This does though
return eval('[function (' + params.join(',')+ '){' + code + '}][0]');
}
この関数と新しい関数の最大の違いは、関数がレキシカルスコープではないことです。したがって、クロージャー変数にアクセスすることはできません。