GO: global object 即 全局上下文
AO :activation object 活跃对象,函数上下文, 在函数执行之前进行的一个步骤
jS代码编译过程:
- 检查通篇的语法错误,若有错误则不编译执行
- 预编译
- 解释一行,执行一行
提升:函数声明会整体提升,变量表达式只有声明提升,赋值不提升
寻找GO的方法:
1. 找变量
2. 找函数声明
3. 执行
寻找AO的方法:
1. 寻找函数的形参和变量声明
2. 把实参的值赋值给形参
3. 寻找函数声明,并赋值
4. 执行
一: 作用域链
- 函数在声明的时候会产生一个全局作用域 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. 所以就出现上面减法问题;