今天寫小游戲sdk的時候,對方調用我的方法,然后傳了個方法過來,我用eval判斷了一下傳過來的是否是function,但是結果出錯了,於是想弄明白eval究竟是怎么使用的,查了下資料,記錄如下。
定義
eval() 可以接受一個字符串str作為參數,並把這個參數作為腳本代碼來執行。
參數
如果參數是一個表達式,eval() 函數將執行表達式;
如果參數是Javascript語句,eval()將執行 Javascript 語句;
如果執行結果是一個值就返回,不是就返回undefined,如果參數不是一個字符串,則直接返回該參數。
語法
eval(string)
舉例
eval("var a=1");//聲明一個變量a並賦值1。
eval("2+3");//執行加運算,並返回運算值。
eval("mytest()");//執行mytest()函數。
eval("{b:2}");//聲明一個對象,如果想返回此對象,則需要在對象外面再嵌套一層小括如下:eval("({b:2})")。
注意:使用eval來解析JSON格式字符串的時候,會將{}解析為代碼塊,而不是對象的字面量。
1,在JSON格式的字符串前面拼接上 "var o =";
2,把JSON格式的字符串使用()括起來,就不會將{}解析為代碼塊,而是表達式。
函數作用域
eval()函數並不會創建一個新的作用域,並且它的作用域就是它所在的作用域,有時候需要將eval()函數的作用域設置為全局,當然可以將eval()在全局作用域中使用,這個時候可以用window.eval()的方式實現。
異同點
共同點:都可以講字符串轉化為js代碼
不同點:Function創建出來的函數,並不會直接調用,只有當手動去調用創建出來的函數的時候才,eval把字符串轉化為代碼后,直接就執行了。