首頁 >web前端 >js教程 >Eval() 與 New Function():它們真的做同樣的事情嗎?

Eval() 與 New Function():它們真的做同樣的事情嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-03 00:11:29381瀏覽

Eval() vs. New Function(): Do They Really Do the Same Thing?

探索eval() 和new Function() 之間的區別

在JavaScript 中,eval() 和new Function() 3被比較了解它們的相似點和不同點。本文檢查它們是否執行相同的任務,並提供其不同行為的詳細說明。

程式碼範例

考慮以下程式碼片段:

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():

    • 在目前範圍內將字串計算為 JavaScript 表達式。
    • 可以存取周圍程式碼區塊中定義的局部變數。
  • new Function():

    • 將字串解析為函數物件。
    • 在單獨的作用域中執行函數,將其與周圍程式碼的局部變數隔離。

突出差異的範例

考慮以下程式碼:

function test1() {
    var a = 11;
    eval('(a = 22)');
    alert(a);            // alerts 22
}

如果使用new Function(' return (a = 22);')() 而不是eval () 時,局部變數a 將保留其原始值,因為new Function() 不會存取周圍範圍內的局部變數。

建議和安全注意事項

一些JavaScript 開發人員(例如 Douglas Crockford)主張除非絕對必要,否則不要使用 eval() 和 new Function()。此建議源自於安全性問題,因為使用任一函數評估不受信任的資料都可能有風險。

因此,通常建議在求助於 eval() 或 new Function( ).

以上是Eval() 與 New Function():它們真的做同樣的事情嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn