欺骗词法,正常情况下,词法作用域在写代码期间函数声明的位置来定义;但在JS中eavl和with可以欺骗词法作用域。<br>注意:欺骗词法作用域会导致性能下降<br>
eval原理:接受一个字符串作为参数,并将里边的代码视为一开始就写在这个位置的代码,执行的过程中动态插入一段代码,没有经过编译阶段的词法分析;引擎在执行eval之后的代码时,并不知道这段代码是动态插入的。严格模式下,eval有自己的作用域,无法修改eval所处的词法作用域。不推荐使用。
with:提供一个快捷访问一个对向的所有属性,但同时它会在所处的词法作用域中创建一个全新的完全隔离的词法作用域,词法作用域就是这个对象;但是这个块内部正常的var却不会被限制在快内部,例如,这个对象中如果没有a属性,但是在with引用对象时如果创建了一个a,此时a就会被泄露到with本身所处的词法作用域中。注意:严格模式下with完全失效,不推荐使用。