eval() と new Function() の違いを調べる
JavaScript では、eval() と new Function() がよく比較されます。それらの類似点と相違点を理解するために。この記事では、それらが同じタスクを実行するかどうかを検証し、それらの異なる動作について詳しく説明します。
コード例
次のコード スニペットを考えてみましょう:
var evaluate = function(string) { return eval('(' + string + ')'); } var func = function(string) { return (new Function( 'return (' + string + ')' )()); } console.log(evaluate('2 + 1')); console.log(func('2 + 1'));
このコードでは、evaluate() は eval() を使用して文字列を JavaScript 式として評価し、func() は new Function() コンストラクターを使用して文字列から関数オブジェクトを作成し、それをすぐに実行します。
異なる機能
どちらの関数も文字列を評価しますが、同じタスクを実行するわけではありません。主な違いは次のとおりです。
eval():
new Function():
違いを強調する例
次のコードを考えてみましょう:
function test1() { var a = 11; eval('(a = 22)'); alert(a); // alerts 22 }
eval の代わりに new Function('return (a = 22);')() が使用された場合() の場合、 new Function() は周囲のスコープからローカル変数にアクセスしないため、ローカル変数 a は元の値を保持します。
推奨事項とセキュリティに関する考慮事項
一部Douglas Crockford などの JavaScript 開発者は、絶対に必要な場合を除き、eval() と new Function() を使用しないことを主張しています。この推奨事項は、いずれかの関数を使用して信頼できないデータを評価することには危険が伴う可能性があるため、セキュリティ上の懸念から生じています。
したがって、一般的には、eval() または new Function() に頼る前に、JavaScript コードを評価および実行するための代替方法を検討することをお勧めします。 ).
以上がEval() と New Function(): 本当に同じことをするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。