乐趣区

javascript静态作用域和动态作用域

静态作用域指的是一段代码,在它执行之前就已经确定了它的作用域,简单来说就是在执行之前就确定了它可以应用哪些地方的作用域 (变量)。
动态作用域–函数的作用域是在函数调用的时候才决定的

JavaScript 采用的是词法作用域即静态作用域;

//  静态作用域:var a = 10;

function fn() {
    var b = 1;
    console.log(a + b);
}

fn(); // 11

在创建 fn 函数时的时候就已经确定了它可以作用哪些变量,如果函数 fn 里面有变量 a 就直接操作变量 a,
如果没有就往上一级查找,这就是静态作用域

//  动态作用域:function foo() {console.log(a);
}

function bar() {
    var a = 3;
    foo();}

var a = 2;
bar(); // 2;

bar 调用,bar 里面 foo 被调用,foo 函数需要查找变量 a,由于 JavaScript 是词法作用域 (即静态作用域),foo 被解析时在全局作用域.
所以只能在全局作用域中找 a, 输出结果为 2,而非 bar 作用域中的 a。如果 js 采用的时动态作用域,那么 foo 在 bar 中调用,就会先在 bar 中查询 a, 输出为 3。

退出移动版