1. 程式人生 > >new Function和eval區別

new Function和eval區別

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

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

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

下面這個例子可以說明了:

var a = 'global scope'
function b(){
   var a = 'local scope'
   eval('console.log(a)') //local scope
   ;(new Function('','console.log(a)'))() //
global scope } b();

 

轉自:https://www.cnblogs.com/zhangfengyang/p/5526024.html