JavaScript で「eval()」と「new Function()」を使用する場合: 主な違いは何ですか?

DDD
リリース: 2024-11-02 03:16:30
オリジナル
481 人が閲覧しました

When to Use `eval()` vs. `new Function()` in JavaScript: What Are the Key Differences?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート