将《javascript 权威指南》第4章收尾,并学习完第5章,收获:
(1)eval()是一个函数还是一个运算符?一个函数
(2)直接调用eval()时,它总是在调用它的上下文作用域内执行;
其他的间接调用则使用全局对象作为其上下文作用域,并且无法读、写、定义局部变量和函数
var geval=eval; //使用别名调用eval将是全局eval
var x="global";
var y="global";
function f(){
var x="local";eval("x+='changed'"); //直接eval更改了局部变量的值return x; //返回更改后的局部变量
}
function g(){
var y="local";geval("y+='changed'"); //间接调用更改了全部变量的值return y;//返回未更改后的局部变量
}
console.log(f(),x); //更改了局部变量:输出"localchanged global"
console.log(g(),y); //更改了全局变量:输出"local globalchanged"