JavaScript 中的 eval 函数、运算符及语句详解
1. eval 函数相关特性
1.1 直接调用与间接调用
在 JavaScript 里,eval 函数存在直接调用和间接调用的区别。直接调用 eval 函数时,使用的是调用上下文的变量环境;而间接调用则以全局对象作为变量环境,无法读取、写入或定义局部变量和函数。以下代码展示了这种差异:
var geval = 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 += 'changed';"); // 间接 eval 设置全局变量
return y; // 返回未更改的局部变量
}
console.log(f(), x); // 局部变量改变: 输出 "localchanged