探索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():
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中文網其他相關文章!