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. 所以就出现上面减法问题;

本文介绍了JS的全局上下文(GO)和函数上下文(AO),阐述了JS代码编译过程和提升规则。还讲解了作用域链,即函数声明产生全局作用域,执行时产生局部作用域和作用域链,结束时销毁。此外,说明了闭包是能访问其他函数作用域变量的函数,以及闭包可能导致的内存泄露问题。
813

被折叠的 条评论
为什么被折叠?



