作用域和作用域链

作者: 淡蓝天风 | 来源:发表于2019-03-07 17:04 被阅读0次

    作用域

        函数是一种引用类型也是对象类型(引用值)

        对象 --> 有些属性是无法访问的,是JS引擎中固有的隐式属性外界无法访问

    Scope作用

        是函数创建时,生成的一个JS内部的隐式属性

        是函数存储作用域链的容器(也就是AO ,GO)

    AO    

        AO只有在被执行的时候才会生成AO,预编译时不会生成AO

        AO是函数的执行期上下文,函数在执行完成以后,AO是要销毁的,再次执行值,AO是重新生成的,AO是一个即时(暂时)的存储容器,不能长时间储存

        每一个函数在被定义的时候都是包含GO的,也就是没有执行该函数的时候

        当函数被执行时(也就是前一刻),在执行预编译,预编译时生成了AO

        所有的AO都是排在自身的最顶端的,所以函数访问外部可以,但是不能被外部访问,但是只证明了一半,因为在执行的过程中,所有的作用域链都是从顶端向下开始执行(找)的,所以自己的AO一定是排在作用域链的最顶端的,GO就这样被挤下去了

    GO

        GO是全局的执行期上下文,GO在全局执行的前一刻,函数的声明已经定义好了(也已经预编译了)

        预编译的两个过程:1.找变量声明 和 2.找函数声明

        每一个函数的作用域链上都有GO

    关于定义问题

    永远都是上级在执行的时候,内部的在预定义

    如,全局在执行的时候,全局函数在被预定义,全员函数在执行的时候,内部函数在被预定义

    不管是 A 的 AO 还是 B 的 AO,访问的地址都是一样的

    栈内存只存储堆内存中的地址,不会进行复制(只是单纯的根据地址找对应的内容)

    重点

        当函数被定义的时候,就已经形成了作用域,作用域链也跟随形成,最后作用域链中也已经存在GO了,

    除非在当前函数在被执行时(也就是执行的那一刹那),才会形成自己的AO

    相关文章

      网友评论

        本文标题:作用域和作用域链

        本文链接:https://www.haomeiwen.com/subject/zhkhpqtx.html