首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS基础——作用域、作用域链

JS基础——作用域、作用域链

作者头像
玖柒的小窝
修改2021-10-22 18:09:43
3.5K0
修改2021-10-22 18:09:43
举报
文章被收录于专栏:各类技术文章~各类技术文章~

作用域 [[scope]],函数定义时自动生成的一个隐式属性,是用来存储函数作用域链 Scope Chain的容器。作用域链是用来存储函数执行上下文 AO全局执行上下文 GO的容器。

  1. 函数被定义时,系统会为函数生成[[scope]][[scope]]中保存该函数的作用域链,并从该作用域链的起始位置开始存储当前环境的作用域链。
  2. 函数被定义后&将要执行前会生成函数本身的AO,并将其插入作用域链的起始位置。
  3. 函数执行完毕,相应AO也会被销毁,等待下次执行时重新生成AO,如果函数内部嵌有其他函数,其内部函数的[[scope]]也会被销毁。

实例分析

    function a() {
        function b() {
            var b = 2;
        }
        var a = 1;
        b();
    }
    var c = 3;
    a();
复制代码
  1. 函数a被定义时,会为a生成[[scope]]属性,其中存储a的作用域链,并将GO插入到作用域链的起始位置。
image.png
image.png
  1. 函数a被执行前一刻,会生成函数a的AO,插入到其作用域链的起始位置。
image.png
image.png

Tips:此时虽然函数a的AO中已经有了函数b的引用,但是函数b还是未被定义的。

  1. 函数a被执行时,此时函数b也被定义,函数b的[[scope]]也在此时生成,其中存储函数b的作用域链,并将当前环境的作用域链插入函数b作用域链的起始位置,即函数a的AOGO
image.png
image.png
  1. 函数b执行前一刻,会生成函数b的AO,插入到函数b作用域链的起始位置。
image.png
image.png
  1. 函数b执行完毕,函数b的AO被销毁,函数b回归到被定义的状态。
image.png
image.png
  1. 函数a执行完毕,函数a的AO被销毁,同时函数b的[[scope]]也将不存在,函数a回归到被定义的状态。
image.png
image.png

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实例分析
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档