zoukankan      html  css  js  c++  java
  • 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链接到继承的作用域链的顶端

  • 相关阅读:
    第九篇装饰器基本原理
    第八篇迭代器协议和生产器
    python第六篇文件处理类型
    Python开发【第十篇】:模块
    习题练习
    2.2.6 集合
    第七篇 python基础之函数,递归,内置函数
    Python开发【第五篇】:Python基础之杂货铺
    Python开发【第四篇】:Python基础之函数
    详解CSS position属性
  • 原文地址:https://www.cnblogs.com/seveinn/p/11801893.html
Copyright © 2011-2022 走看看