*函数作用域原理[JavaScript_006]

作用域


函数的属性

  function test(){

  }
  //可使用的属性例如 test.arguments; test.name等
  //不可访问的属性test.[[scope]](隐式属性,系统自行调用),存放的内容为作用域,执行期上下文的集合

执行期上下文(可以理解为AO)


  • 详解:在执行前(预编译期间),产生的内部对象AO;完成函数执行后执行上下文销毁;执行多次函数,产生多个AO;

[[scope]]详解


作用:存储各个变量作用域,存储形式类似与数组(单链表)

  • 示例详解
function a(){
    function b(){
        var b =234;
    }
    var a = 123;
    b();
}
var glob =100;
a();
  • 自己做了一些图解,便于理解


    a的相关作用域存储原理

    b的相关作用域存储原理
  • 注意几点
    1. b函数在定义时和a函数在执行时的AO对象指的都是a函数的AO
    2. AO对象始于预编译,终于调用完成
    3. 若对方法进行两次或两次以上的调用,其中的AO对象内容一致(递归除外),但是对象并不一致,可以理解为存储AO的内存地址发生了变化 (此处理解为个人理解)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容