eval()
eval()是一个函数,但是由于种种原因被当成一个运算符
eval()只有一个参数,如果传入的不是字符串,将会返回这个参数,若果是字符串,将返回一个编译后的字符串,如果编译异常则会抛出错误。
function a (){
var b = 2 // => 定义一个局部变量b;
eval("b") // => 2,直接调用,返回变量的值;
eval("b = 1") // => 1,会改变变量b的值;
eval("var y = 3") // => 重新定义一个变量y
}
当然,传入的参数必须在语法上讲的通
eval()具有更改局部变量的能力,当通过别名调用时,eval()会将其字符串当成顶层的全局代码来执行
var geval = eval; // => 使用别名调用eval将是全局eval
var x = "global", y = "global" // => 两个全局变量;
function f(){ // => 函数内执行的是局部eval
var x = "local"; // => 定义局部变量
eval("x += 'changed'"); // => 直接eval更改了局部变量的值
return x; // => 返回更变后的局部变量
}
function g(){ // => 这个函数内执行了全局eval
var y = "local" // => 定义局部变量
geval("y += 'chenged';") // => 间接调用改变了全局变量的值
return y // => 返回未更改的局部变量
}
console.log(f(), x); // =>lcoalchanged global,改变局部
console.log(g(), x); // => local globalchanged,改变全局