• 作用域和作用域链


    对这一块的概念一直模棱两可的,今天听了个视频,觉得有种茅塞顿开的感觉。故做此总结:

    1.[[scope]]:每个javascript函数都是一个对象,对象中有些属性我们可以访问。但有些不可以,这些属性仅供javascript引擎存取,[[scope]]就是其中一个。

       [[scope]]指的就是我们所说的作用域,其中存储了运行上下文的集合。

    2.作用域链:[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链

    定义就是这么一种东西,你不懂得的时候觉得它说的全是废话,当你真的理解了的时候,就会觉得它总结的很到位。

    我们来看个列子

    function a(){

      function b(){

        function c(){

        }

        c();

      }

      b();

    }

    a();

    对于这个函数

     a     definded     a.[[scope]]    --> 0:GO

     a     doing          a.[[]scope]    --> 0 : aAO  //自己函数生成的作用域链在最顶部

                     --> 1 : GO

     b     definded    b.[[scope] ]    --> 0 : aAO //b是在a函数内部创建的,所以一开始就继承了a的作用域链

                     --> 1 : GO

    b      doing         b.[[scope]]    -->0 : bAO //生成自己的作用域链

                    --> 1 : aAO 

                    --> 2 : GO

    c     definded     c.[[scope] ]   --> 0 : bAO //一开始就继承了b的作用域链

                   --> 1 : aAO 

                   --> 2 : GO         

    c     doing         c.[[scope]]     --> 0 : cAO //生成自己的作用域链

                   -->  1 : bAO 

                     -->  2 : aAO 

                     -->  3 : GO

    查找变量只要访问该函数执行时的作用域链就可以了,函数执行之后会扔掉自己的执行上下文。

    大概就是这个意思,遇到函数还是要多分析,多思考,渐渐地就自成体系了,学习中,望大家指教~    

  • 相关阅读:
    PHP 数据库 ODBC
    PHP MySQL Delete
    PHP MySQL Update
    PHP MySQL Order By 关键词
    PHP MySQL Where 子句
    01_今日介绍
    00_前情回顾
    02_cfork分叉进程
    01_c++下jni开发说明
    17_activity任务栈和启动模式
  • 原文地址:https://www.cnblogs.com/xuniannian/p/8084965.html
Copyright © 2020-2023  润新知