js 作用域 作用域链 闭包 内存泄露

GO: global object 即 全局上下文

AO :activation object 活跃对象,函数上下文, 在函数执行之前进行的一个步骤

 

jS代码编译过程:

  1. 检查通篇的语法错误,若有错误则不编译执行
  2. 预编译
  3. 解释一行,执行一行

提升:函数声明会整体提升,变量表达式只有声明提升,赋值不提升

   

寻找GO的方法:

1. 找变量

2. 找函数声明

3. 执行

 

寻找AO的方法:

1. 寻找函数的形参和变量声明

2. 把实参的值赋值给形参

3. 寻找函数声明,并赋值

4. 执行

 

一: 作用域链

  1. 函数在声明的时候会产生一个全局作用域 GO, 全局作用域执行期上下文

2.当函数a() 执行的时候 产生局部作用域 AO 和 作用域链

3. 当函数a() 执行结束的时候  垃圾回收机制 销毁作用域

 

二: 闭包 能够访问另一个函数作用域的变量的函数 

     三:闭包 内存泄露

function test () {
    var num = 100
    function add () {
      num ++
      console.log(num);
    }
    function redce () {
      num --
      console.log(num);
    }
    return { add, redce }
}
var obj = test()
obj.add()    // 101
obj.redce()  // 100

    

1. 函数test1  执行时   产生自己作用域AO

2. 函数test1  执行后   由于内部函数test2 中 没有声明a变量

                                   test2 中的a  沿着作用域链  通过指针 找到 test1放在中的a内容

                                   所以回收机制无法清除 正在使用中 test1堆内存

3. 所以就出现上面减法问题; 

 

 

张贴在2