eval() と new Function() の違いを調べる
JavaScript では、eval() と new Function() の両方で次のことが可能です。動的コード実行。ただし、それらは基礎となるメカニズムとスコープが大きく異なります。
eval()
eval() は、現在の実行スコープ内の JavaScript 式として文字列を評価します。これは、呼び出されるスコープ内のローカル変数にアクセスできることを意味します。
new Function()
new Function() は、JavaScript コード文字列を関数に解析します。物体。次に、この関数が呼び出され、そのコードが別のスコープで実行されます。このスコープ外のローカル変数にはアクセスできません。
実際的な違い
次の例を考えてみましょう。
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'));
両方とも評価( ) および func() は、算術式 '2 1' の結果を返します。ただし、次のコードが関数内で実行される場合:
var a = 11; evaluate('a = 22');
eval() は現在の実行スコープを使用するため、a の値は 22 に変更されます。対照的に、代わりに func() が使用された場合、a は別のスコープで動作するため、 a の値は変更されません。
使用上の考慮事項
while eval() new Function() は特定のシナリオで役立つ場合がありますが、セキュリティ リスクや意図しない結果が生じる可能性があるため、注意して使用する必要があります。信頼できないデータを評価すると脆弱性が露呈する可能性があり、どちらの関数もグローバル スコープを汚染する可能性のあるグローバル オブジェクトを作成する可能性があります。
一般に、絶対に必要な場合を除き、eval() と new Function() の使用を避けることをお勧めします。代わりに、カスタム関数や eval() 代替構文 (eval("1 1")) の使用など、より安全な代替手段を検討してください。
以上がJavaScript で「eval()」と「new Function()」を使用する場合: 主な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。