JavaScript中eval函數的用法

  1. eval函數會計算傳給的字符串, 並把做爲腳本代碼來執行。瀏覽器

eval(str)

  此函數接受一個字符串做爲參數,並把str當作一段JavaScript腳本代碼來執行,若是str執行結果返回一個值則返回此值,不然返回undefined。函數

  在eval()函數裏,它會將JavaScript代碼進行編譯,若是編譯失敗則拋出語法錯誤異常。若是編譯成功可是若是這個代碼沒有值的話,eval()最終返回的結果是underfined。若是字符串拋出一個異常,則這個異常將把該調用傳遞給eval()。spa

eval("var a=1");//聲明一個變量a並賦值1。
eval("2+3");//執行加運算,並返回運算值。
eval("mytest()");//執行mytest()函數。
eval("{b:2}");//聲明一個對象。
var ob = '{ "name":"wuhan", "age":18 }';
var op = eval("("+ob+")"); // {name: "wuhan", age: 18}

    

  2. eval函數做用域,先看一個例子3d

function ab() {
    eval("var x = 1");
    console.log(x); // 1
}
ab(); console.log(x);
// Uncaught ReferenceError: x is not defined

  結論: 由以上表現能夠得出,eval()函數並不會建立一個新的做用域,而且它的做用域就是它所在的做用域。這在全部主流瀏覽器都是如此。code

      可是有時候須要將eval()函數的做用域設置爲全局,固然能夠將eval()在全局做用域中使用,可是每每實際應用中,須要在局部做用域使用具備全局做用域的此函數,這個時候能夠用window.eval()的方式實現。對象

  例子以下blog

function ab() {
    window.eval("var x = 1");
    console.log(x); // 1
}
ab();
console.log(x); //  1

  在標準瀏覽器中,x如今是全局變量,可是在IE8瀏覽器下是會報錯的ip

  此時能夠使用IE瀏覽器獨有的window.execScript()解決IE8和IE8瀏覽器的問題。作用域

  兼容函數以下: 字符串

function testEval() {
    if(window.execScript){
        window.execScript("var a = 180");
    }else{
        window.eval("var a = 1000");
    }
    console.log(a,'函數內部');
}
testEval();
console.log(a,'函數外部');

  標準瀏覽器打印結果

  IE8瀏覽器打印結果

相關文章
相關標籤/搜索