举例:
function foo (str,a){
eval(str)
console.log(a,b)
}
var b = 2;
foo('var b = 3',1) //1,3
eval中所执行的代码中有一个或多个声明,就会对eval所处的词法作用域进行修改,在运行期修改书写期的词法作用域,尽量少用,在遇到eval和with是编译无法优化,对性能会有损失。
注意:
function foo (str){
"use strict"
eval(str)
console.log(a) //a is not defined
}
foo('var a = 1')
在严格模式下,执行上面代码,作用域是不会被修改的。
with对词法作用域的修改还未理解,求解惑