js词法作用域

词法作用域就是说在词法分析的时候就已经形成了的作用域。这个时候已经定死了。如果一个函数在全局里面声明了,她的父级作用域就是全局作用域。一个函数的作用域只有可能存在于一个父级作用域里面。不会同时存在两个父级作用域。

 var a = 2;
function foo() {
    console.log( a );
    console.log(this.a);
    console.log(this);
}
function bar() {
    var a = 3;
    foo();
}
bar(); //2. 2. window

而如果是动态作用域的话,不关心在哪里声明的,只关心他是在哪里调用的。动态作用域是基于调用栈的。而不是代码中的嵌套关系。js中this就是与函数在哪里调用有关。

原文地址:https://www.cnblogs.com/zhuni/p/6389504.html