這題目的看起來比較簡單,但是總感覺有沒有那麽簡單,確實是這樣子。所以回答這個題目要從不同的角度去回答。首先回答清楚它是幹什麽的有什麽用,然後在談談它對作用域的影響,然後就是執行效率的問題,最後談談eval()的其它作用。這樣答下來自己都覺得滿意了吧!
eval()的作用
把字符串參數解析成JS代碼並運行,並返回執行的結果;
例如:
[javascript]?view plain?copy
1、eval("2+3");//執行加運算,並返回運算值。?
2、eval("varage=10");//聲明壹個age變量?
eval的作用域
[javascript]?view plain?copy
1、functiona(){?
2、 eval("var?x=1");?//等效於?var?x=1;?
3、 console.log(x);?//輸出1?
4、}?
5、a();?
6、console.log(x);//錯誤?x沒有定義?
說明作用域在它所有的範圍內容有效
示例2:
[javascript]?view plain?copy
1、functiona(){?
2、 window.eval("var?x=1");?//?等效於window.x=1;定義了全局變量?
3、 console.log(x);?//輸出1?
4、}?
5、a();?
6、console.log(x);//輸出1?
這段代碼悲劇了?在IE8及IE8壹下的版本就不支持了。?
解決方法:
[javascript]?view plain?copy
1、functiona(){?
2、 if(window.execScript){?//?支持IE8及以下的版本?
3、 ?window.execScript("var?x=1");?
4、 }?
5、 else{?//常用的瀏覽器都支持?
6、 ?window.eval("var?x=1");?
7、 }?
8、 console.log(x);?
9、}?
10、a();?
11、console.log(x);?
註意事項
應該避免使用eval,不安全,非常耗性能(2次,壹次解析成js語句,壹次執行)。
其它作用
由JSON字符串轉換為JSON對象的時候可以用eval,例如:
[javascript]?view plain?copy
1、varjson="{name:'Mr.CAO',age:30}";?
2、varjsonObj=eval("("+json+")");?
3、console.log(jsonObj);?