首頁 web前端 js教程 Eval 和 new function 不是一回事_javascript技巧

Eval 和 new function 不是一回事_javascript技巧

May 16, 2016 pm 05:45 PM
eval new

1.函數宣告式

複製程式碼 程式碼如下:

function foo(oo >//code
}

在JS中,函數也是對象,函數對象連接到Function.prototype( Function.prototype連接到Object.prototype)
2、函數字面量式

複製程式碼 程式碼如下:
var foo = function foo(){
//code
}

物件擁有一個連到原型物件的隱藏連接。物件字面量間生的物件連接到Object.prototype。 foo.__proto__ == Function.prototype
3、使用New的建構子產生

new Function ([arg1[, arg2[, ... argN]],] functionBody);

每次執行都會產生新的函數
網路上的資料有很多介紹這三種模式的,前2種幾乎是相同的,基於相同的詞法作用域。

詞法作用域:變數的作用域是在定義時決定而不是執行時決定,也就是說詞法作用域取決於源碼,透過靜態分析就能確定,因此詞法作用域也叫做靜態作用域。 with和eval除外,所以只能說JS的作用域機制非常接近詞法作用域(Lexical scope)。
突然覺得有點離題了,這篇文章其實是記錄eval和New Function的區別,下面回歸正題:

以前有人會說,new Function的方式是幾乎與eval相等,今天我查了一下,確實是不同的東西,說這句話的人太不負責了。關於eval和new function,得到的結果都是一致的,都會叫你不要去使用它們。所以結論就是「不得不」才使用。

eval() evaluates a string as a JavaScript expression within the current execution scope and can access local variables.
new Function()parses the JavaScript code stored in a string in function string objtion the JavaScript be called. It cannot access local variables because the code runs in a separate scope.
從以上2點看出,eval的作用域是現行的作用域,而new Function是動態生成的,它的作用域始終都是window。並且,eval可以讀到本地的變量,new Function則不能。

複製程式碼 程式碼如下:
function test() {


function test() {
var = 111 ;
eval('(a = 22)'); //如果是new Function('return (a = 22);')(); a的值是不會覆寫的。
alert(a); // alerts 22
}


所以一般eval只用於轉換JSON對象,new Function也有特殊的用途,只是在不清楚的情況下還是少用為妙。

更多資料:邪惡的eval和new Function

這裡作個備份:
代碼: 複製程式碼

程式碼如下:


// 友善提醒:為了你的手指安全,請在Chrome下運行
'alert("hello")' .replace(/. /, eval);
'alert("hello")'.replace(/. /, function(m){new Function(m)();});
var i = 0; eval(new Array(101).join('alert( i);')); var i = 0; new Function(new Array(101).join('alert( i); '))();
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

python中eval是什麼意思? python中eval是什麼意思? May 22, 2019 pm 03:18 PM

eval的意思是“評估”,是python中的一個內建函數,用於執行一個字串表達式,並返回表達式的計算結果;即變數賦值時,等號右邊的表示是寫成字串的格式,傳回值就是這個表達式的結果。語法“eval(表達式[, globals[, locals]])”。

win下php怎麼禁止eval win下php怎麼禁止eval Oct 31, 2022 am 09:33 AM

win下php禁止eval的方法:1、下載「PHP_diseval_extension」;2、找到伺服器目前使用的PHP;3、開啟PHP設定檔 ;4、新增「extension=diseval.so」程式碼;5、重啟服務即可。

python中eval用法通俗講解 python中eval用法通俗講解 Mar 25, 2024 pm 02:08 PM

在Python中,eval() 函數用於執行一個字串表達式並傳回其結果。它可以將一個包含表達式的字串作為參數,並計算這個表達式的值。 eval() 函數的功能強大,但需要注意的是,它會執行字串中包含的任何有效的 Python 表達式,因此在使用時應避免接受外部輸入的字串,以防止安全漏洞。

eval在python中是什麼 eval在python中是什麼 Aug 08, 2023 pm 05:07 PM

eval在python中是一個內建函數,用於將字串作為程式碼進行解析和執行,並傳回執行結果。由於「eval」函數可以執行任意的Python程式碼,因此在使用"eval"函數時需要謹慎考慮安全性問題,如果給「eval」函數傳入不可信的字串,可能會導致程式碼注入等安全性問題。

怎麼使用Python eval函數 怎麼使用Python eval函數 Jun 04, 2023 am 09:19 AM

Python的eval()我們可以使用內建的Pythoneval()[1]從基於字串或基於編譯程式碼的輸入動態地計算表達式。如果我們向eval()傳遞一個字串,那麼該函數會解析它,將其編譯為字節碼[2],並將其作為一個Python表達式進行計算。但如果我們用一個編譯過的程式碼物件呼叫eval(),那麼函數只執行計算步驟,如果我們用相同的輸入多次呼叫eval(),這就非常方便了。 Python的eval()的定義如下。 eval(expression[,globals[,locals]])該函數

java中的new關鍵字怎麼用 java中的new關鍵字怎麼用 May 03, 2023 pm 10:16 PM

1.概念在Java語言裡,「new」表達式是負責建立實例的,其中會呼叫構造器去對實例做初始化;構造器本身的回傳值類型是void,並不是「建構器回傳了新建立的物件的參考”,而是new表達式的值是新建立的物件的參考。 2.用途新建類別的物件3.工作機制為物件成員分配記憶體空間,並指定預設值對成員變數進行明確初始化執行建構方法計算並傳回參考值4.實例new操作往往意味著記憶體中的開啟新的記憶體空間,這個記憶體空間分配在記憶體中的堆區,受到jvm控制,自動進行記憶體管理。這裡我們就是用String這個類別來舉例說明。 pu

go語言中make和new的差別是什麼 go語言中make和new的差別是什麼 Jan 09, 2023 am 11:44 AM

區別:1、make只能用來分配及初始化類型為slice、map、chan的資料;而new可以分配任意類型的資料。 2.new分配返回的是指針,即類型「*Type」;而make返回引用,即Type。 3.new分配的空間會被清除;make分配空間後,會初始化。

See all articles