精华内容
下载资源
问答
  • 作用域链

    2021-02-23 09:36:16
    什么是作用域链? 当声明一个函数时,局部作用域一级一级向上包起来,就是作用域链。 可以说我们在执行上下文中访问到的父级甚至全局的变量,都是作用域链的功劳。 作用域链理解为一组对象列表,包含父级和自身的...

    什么是作用域链?

    当声明一个函数时,局部作用域一级一级向上包起来,就是作用域链。

    可以说我们在执行上下文中访问到的父级甚至全局的变量,都是作用域链的功劳。

    作用域链理解为一组对象列表,包含父级和自身的变量对象,因此可通过作用域链访问到父级里的变量和函数。

    作用域链特性?

    当函数执行时,总是先从函数内部寻找局部变量。

    如果内部找不到(函数的局部作用域没有),则会想创建函数的作用域(声明函数的作用域)寻找,以此向上。

    var a = 1;
    function fn () {
      var a = 10;
      function fn1 () {
        var a = 20;
        console.log(a);//20
      }
      function fn2 () {
        console.log(a);//10
      }
      fn1();
      fn2();
    }
    fn();//1

    解析:当执行fn1的时候,创建函数fn1的执行环境,并将该对象置于链表开头,然后将函数fn的调用对象放到第二位,最后是全局对象,作用域链的链表结构是fn1->fn->window。

    从链表的开头寻找变量a,即fn1函数内部找变量a,找到了,结构是20。

    同样,执行fn2时,作用域链的链表的结构是fn2->fn->window。从链表的开头寻找变量a,即fn2函数内部找变量a,找不到,预算从fn内部找变量a,找到了,结果是10。

    最后在最外层打印出变量a,直接从变量a的作用域即全局作用域内寻找,结果为1。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,013
精华内容 4,405
关键字:

作用域链