JS作用域链

2019-12-11  本文已影响0人  鲁女女

当代码在一个环境中执行的时候,会创建变量对象的作用域链(scope chain)
作用域链的用途是:保证对执行环境有权访问的所有变量和函数的有序访问。
作用域链的首端,始终是当前执行代码所在环境的变量对象。
标识符沿着作用域链一级一级的搜索标识符的过程,逐级向后走,直到找到标识符为止(如果没有找到,会有错误发生)

var a = 1;
function f1() {
    console.log(a);// undefined
    var a = 2;
    console.log(a)//2
    function f2() {
        console.log(a)//2
        a = 3;
        console.log(a);//3
        function f3() {
            console.log(a);//undefined
            var a = 4;
            console.log(a);//4
         }
         f3();
     }
     f2();
}
f1();
console.log(a)//1

//以上代码执行如下
var a = 1;
function f1() {
   VO = {
      arguments:{},
      a:undefined,
      f2:function () { }
   }
   console.log(a);// undefined
   a = 2;
   console.log(a)//2
   function f2() {
      VO = {
           arguments:{},
           f3:function () {}
       }
       console.log(a)//2
       a = 3;
       console.log(a);//3
       function f3() {
          VO = {
              arguments:{},
              a:undefined,
           }
           console.log(a);//undefined
           a = 4;
           console.log(a);//4
         }
         f3();
      }
      f2();
}
f1();
console.log(a)//1
上一篇 下一篇

猜你喜欢

热点阅读