JavaScript 中的词法作用域

JavaScript 中作用域有两种主要的工作模式,第一种是词法作用域,另外一种叫做动态作用域

大部分标准语言编译器的第一个工作叫做词法化,也就是说对源代码中的字符进行检查,然后如果是有状态的解析过程,那么还会赋予单词语义。所以,词法作用域就是定义在词法阶段的作用域。是由你在写代码时将变量和作用域写在哪里决定的,因此词法分析器会保持作用域不变。

举个栗子:

var a = 1;

function demo() {
  alert(a);
}

~function(){
  var  a = 2;
  demo();  // 1
}()

demo()函数弹出的 a 为 1 而不是 2,说明匿名函数内部定义 a 变量并没有成功。说明了变量 a 在编译器执行阶段就已经确定了 a ,不会再去动态的改变。

猜你喜欢

转载自blog.csdn.net/xjlinme/article/details/78372872