作用域

函数的属性

对象有属性,函数也有自己的属性

  1. function test(){
  2. }
  3. test.name; // "test"
  4. test.length;//0

对象有一些属性是我们无法访问的,这些属性是JS引擎内部固有的隐式属性

[[scope]]

函数创建时,生成的一个JS内部的隐式属性 是函数存储作用域链的容器

AO

每个函数执行前都要生成一个新的AO,AO是一个即时存储容器,函数调用完毕AO会被销毁。

所有的函数[[scope]]栈底保存了GO, AO排在最顶层

函数在被定义的时候,先拿上级的[[scope]],再把自己生成的AO加进去