js作用域理解---欺骗词法

举例:

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对词法作用域的修改还未理解,求解惑

posted on 2020-12-04 17:07  html123  阅读(64)  评论(0编辑  收藏  举报