作用域和作用域链

81 阅读1分钟

作用域最大的作用是,隔离变量,避免变量污染

var x = 10;
function fn() {
    console.log(x);
}
function show(f) {
    var x = 20;
    (function() {
        f(); // 10,而不是20
    })();
}
show(fn);

作用域是创建的时候确定的,而不是调用的时候,这就是所谓的“静态作用域”

作用域与执行上下文的区别 js属于解释型预言,js的执行分为两个阶段:
1、 解释阶段
  词法分析
  语法分析
  作用域规则确定
2. 执行阶段
  创建执行上下文
  执行代码
  垃圾回收

js解释阶段便会确定作用域规则,因此作用域在函数定义时就已经确定了,而不是函数调用时确定,但执行上下文是函数执行之前创建的 执行上下文最明显的就是this的指向是执行时确定的。而作用域访问的变量是编写代码的机构确定的

作用域和执行上下文的最大区别就是: 执行上下文在运行时确定,随时可能改变,作用域是定义时确定,一旦确定就不会改变