1. 程式人生 > >javascript中的Function和eval

javascript中的Function和eval

eval(String):可以計算字串內容 example:

<script type="text/javascript">
    eval("x=10;y=20;document.write(x*y)");
    document.write(eval("2+2"));
    var x=10;
    document.write(eval(x+17));
</script>

輸出為:200 4 27

    var jsstring="var un=1;console.log(un);";
    eval(jsstring);

    jsstring="var deux=2;console.log(deux);";
    new Function(jsstring)();

    jsstring="var trois=3;console.log(trois);";
    (function () {
        eval(jsstring);
    }());
    console.log(typeof un);
    console.log(typeof deux);
    console.log(typeof trois);

來看上面一段程式碼,在console可以看到輸出結果為: 結果圖 首先定義了全域性變數 jsstring為字串,eval執行了內容的計算,在控制檯顯示1,執行完成後un變為全域性變數;Function中的程式碼將在區域性函式執行,因此程式碼中deux不會成為全域性變數,因此後面輸出deux,trois的型別都是未定義。 無論哪裡執行Function都僅僅能看到全域性作用域,不改變區域性變數,eval()則會訪問和修改它外部作用域的變數。

<script type="text/javascript">
    (function(){
        var local=1;
        eval("local=3;console.log(local)");   //3
        console.log(local);//3
    }());
    (function(){
        var local=1;
        Function("console.log(typeof local);")();//undefined
        console.log(local); //1
    }());
</script>

有上述例子可以知道,Function不會把區域性變數修改為全域性變數