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不会把局部变量修改为全局变量