1. 程式人生 > >eval 欺騙詞法 你不知道的javascript

eval 欺騙詞法 你不知道的javascript

#你不知道的javascript上卷(1)#

1、介紹:eval()函式可以接受一個字串為引數,並將其中的內容是為好像在書中寫時就存在於程式中這個位置的程式碼

2、例子

function foo(str, a) {
  eval(str)
  console.log(a, b)
}
var b = 2
foo('var b = 3', 1)

foo('var b = 3', 1)第一個引數就是接受一個字串的引數

eval()呼叫中的‘var b= 3’ ;這段程式碼會被當做本來就在那裡一樣處理,由於這個字串程式碼中聲明瞭一個新的變數b,因此他對已經存在的foo()的此法作用域進行了修改,實際上就是在foo()內部建立了一個變數b,並這筆了外部(全域性變數)作用域中的同名變數

console.log()被執行時,會在foo()的內部同事找找到a和b,但是用暖無法找到外部的b,因此會輸出‘1, 3’,而不是正常情況下的‘1, 2’