1. 程式人生 > >Web前端面試指導(三十七):eval是做什麼的?

Web前端面試指導(三十七):eval是做什麼的?

題目點評

這題目的看起來比較簡單,但是總感覺有沒有那麼簡單,確實是這樣子。所以回答這個題目要從不同的角度去回答。首先回答清楚它是幹什麼的有什麼用,然後在談談它對作用域的影響,然後就是執行效率的問題,最後談談eval()的其它作用。這樣答下來自己都覺得滿意了吧!

eval()的作用

把字串引數解析成JS程式碼並執行,並返回執行的結果;

例如:

eval("2+3");//執行加運算,並返回運算值。
eval("varage=10");//宣告一個age變數

eval的作用域

functiona(){
 eval("var x=1"); //等效於 var x=1;
 console.log(x); //輸出1
}
a();
console.log(x);//錯誤 x沒有定義

說明作用域在它所有的範圍內容有效

示例2:

functiona(){
 window.eval("var x=1"); // 等效於window.x=1;定義了全域性變數
 console.log(x); //輸出1
}
a();
console.log(x);//輸出1

這段程式碼悲劇了?在IE8及IE8一下的版本就不支援了。 


解決方法:

functiona(){
 if(window.execScript){ // 支援IE8及以下的版本
  window.execScript("var x=1");
 }
 else{ //常用的瀏覽器都支援
  window.eval("var x=1");
 }
 console.log(x);
}
a();
console.log(x);

注意事項

應該避免使用eval,不安全,非常耗效能(2次,一次解析成js語句,一次執行)。

其它作用

由JSON字串轉換為JSON物件的時候可以用eval,例如:

varjson="{name:'Mr.CAO',age:30}";
varjsonObj=eval("("+json+")");
console.log(jsonObj);