JavaScript 中作用域有两种主要的工作模式,第一种是词法作用域,另外一种叫做动态作用域。
大部分标准语言编译器的第一个工作叫做词法化,也就是说对源代码中的字符进行检查,然后如果是有状态的解析过程,那么还会赋予单词语义。所以,词法作用域就是定义在词法阶段的作用域。是由你在写代码时将变量和作用域写在哪里决定的,因此词法分析器会保持作用域不变。
举个栗子:
var a = 1;
function demo() {
alert(a);
}
~function(){
var a = 2;
demo(); // 1
}()
demo()
函数弹出的 a 为 1 而不是 2,说明匿名函数内部定义 a 变量并没有成功。说明了变量 a 在编译器执行阶段就已经确定了 a ,不会再去动态的改变。
网友评论