• JS学习笔记 之 作用域链


    作用域,作用域链精解
    函数          -->     函数类对象
    可访问的属性:包括test.name test.prototype等
    不可访问的属性:如test.[[scope]]
           ↓                               
                            由于函数执行而产生的作用域链->存储了执行期上下文的集合 ->呈链式连接
    仅供javascript引擎存取                                                    ↓
                                                     函数每次执行时,对应独一无二的执行期上下文,执行完毕即销毁
     
    (在某函数中)查找变量:从(该函数的)作用域链顶端,依次向下查找
     
    作用域链图解
    注意:下例中,b的定义是在a执行时产生的,a没有执行的话就没有b的定义
     1  function a(){
     2      function b(){
     3         var b = 234;
     4       }
     5      var a = 123;
     6      b();
     7  }
     8         
     9  var glob = 100;
    10  a();
    访问变量时,查找的是执行时的作用域链
    a defined:      -->     0 : GO    全局中的函数被定义时,生成全局的上下文
    a execute:      -->     0 : AO    全局的函数执行时,产生自己的独一无二的执行期上下文,链接到全局的上下文,形成自己的作用域链
                                    1 : GO
     
    b defined:       -->    0 : aAO    局部的函数被定义时,首先拿到已有的外部函数的上下文
                                     1 : GO
    b execute:       -->     0 : bAO    局部函数执行时,生成自己的独一无二的执行期上下文,链接到先前已经拿到的外部函数的上下文
                            -->     1 : aAO
                            -->     2 : GO
     
     

    b在a内部定义,直接继承了a的作用域链(直接引用,指向的就是原来A的AO),接着,在执行时,将生成的自己的AO链接到继承的作用域链的顶端

  • 相关阅读:
    linux系统--磁盘管理命令(二)
    linux系统--磁盘管理命令(一)
    linux系统--用户和用户组
    linux4.10.8 内核移植(四)---字符设备驱动_led驱动程序
    linux4.10.8 内核移植(三)---裁剪内核
    linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统
    Linux 4.10.8 根文件系统制作(三)---制作yaffs文件系统
    Kotlin的面向对象入门
    Python 中的GIL
    python 虚拟环境的 安装与 使用 和修改为豆瓣源
  • 原文地址:https://www.cnblogs.com/seveinn/p/11801893.html
Copyright © 2020-2023  润新知