javascript中的Function和eval
阿新 • • 發佈:2018-12-12
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不會把區域性變數修改為全域性變數