eval的作用其實很簡單,就是把一段字串傳遞給JS解釋器,由Javascript解釋器將這段字串解釋成Javascript程式碼,並且執行他。
舉個最簡單的例子:
很簡單,把字串解釋成JS程式碼並執行,彈出2。
當然,上面的例子只是個玩具,在實際中沒有人會傻到這麼用。我想大家最基本的使用eval函數都是應該在DOM中,例如我們有div1,div2,div3,那麼在document.getElementByID時我們的ID沒有辦法去得到,那麼最簡單的辦法就是在for循環中,使用eval來拼接這麼一段程式。例如這樣:
最基本的用法說完,相信大家還是對這個函數意猶未盡,如果這個函數只有這麼點用法,那就太無聊了。那我們就一點點來剖下eval()函數。
我們就先從eval的作用域說起,先看這樣一段函數:
程式碼很簡單,結果可以彈出3。接下來再比較這段程式碼:
結果是先彈出3,然後是undefined。
那麼說明:eval()函數動態執行的程式碼並不會建立新的作用域,其程式碼就是在目前的作用域執行的。因此也就是說,eval()函數也完全可以使用目前作用域的this,argument等物件。
在IE中,支援這樣一種和eval()非常類似的函數叫做:execScript()。我們可以來寫段簡單的程式碼。
結果彈出了2個3,這也就看出了execScript函數的特點,首先他和eval相類似,都能將字串解釋成JS程式碼並且執行,但是他的作用域不是目前作用域,而是全域作用域。當我們把上面的程式碼放到Firefox和Google瀏覽器上去試試看:發現在Firefox上execScript上程式碼是無效的,那麼也說明一個問題,execScript程式碼的瀏覽器相容性是有問題的。
那麼就引申出這樣一個問題,我們如何能把這兩個函數的「優點」給匯總到一起呢,也就是說,全局 瀏覽器相容性。上網搜了一下>