eval和new Function的區別

2022-05-29 19:57:10 字數 467 閱讀 8318

eval和new function都可以動態解析和執行字串。但是它們對解析內容的執行環境判定不同。

var a = 'global scope'

function b()

b()

eval中的**執行時的作用域為當前作用域。它可以訪問到函式中的區域性變數。

new function中的**執行時的作用域為全域性作用域,不論它的在哪個地方呼叫的。所以它訪問的是全域性變數a。它根本無法訪問b函式內的區域性變數。

注意,當我們在b函式中不定義變數a時,兩種方法的輸出相同。這與上述結論並不衝突。因為**執行時,對變數的查詢是從內到外的。當eval中的**執行時,它依然是優先從b函式內部查詢a變數,當查詢不到時,再到全域性中查詢a,這時找到的a當然是'global scope'。

var a = 'global scope'

function b()

b()

執行順序和eval

1 將命令切割成token 是以固定的一支煙meta字元分割的,有空格 製表符 換行符 與 token 的種類暴扣單詞,關鍵字 輸出入重定向 以及分號 2 檢查每個命令的第乙個token,看看是否他是不帶引號或者反斜槓的關鍵字,如果他是乙個開發的關鍵字,則這個命令其實是乙個復合命令 3 將每個命令的...

parse 和 eval 的區別

一般在js中使用parse將string轉json,相對來說比較安全 var a var b var c var d var e var f var g parse 物件和陣列 屬性名稱必須用雙引號包裹 最後乙個屬性後面不能有逗號。數值 前導0不能使用 在 json.stringify 中將會被忽略...

bind和eval的區別

eval 方法 在執行時使用反射執行後期繫結計算,因此與標準的asp.net資料繫結方法bind相比,會導致效能明顯下降。它一般用在繫結時需要格式化字串的情況下。多數情況盡量少用此方法 eval 方法是靜態 唯讀 方法,該方法採用資料字段的值作為引數並將其作為字串返回。bind 方法支援讀 寫功能,...