eval
JavaScript中的eval()函数可以接受一个字符串作为参数,并将其中的内容视为好像在书写时就存在于程序中的这个位置的代码。换句话说,可以在你写的代码中用程序生成代码并运行,就好像代码是写在那个位置的一样。
根据这个原理来理解eval(),它是如何通过代码欺骗和假装书写时(也就是词法期)代码就在那,来实现修改词法作用域环境的,这个原理就变得清晰易懂了。
在执行eval()之后的代码时,引擎并不知道,或在意前面的代码是以动态形式插入进来的,并对词法作用域的环境进行修改的。引擎只会如往常地进行词法作用域查找。
```
function foo(str, a) {
eval( str ); // 欺骗!
console.log('a', a, 'str', str );
}
var b = 2;
foo( 1,3 ); // 1, 3
```
注:eval()和with()一样不推荐使用。