js 运行三部曲
语法分析
预编译
1
2
3
4
5
6
解释性语言
函数声明整体提升
变量 声明提升
如果变量未经声明就赋值,变量就为全局对象所有。
一切声明的全局变量,全是 window 的属性。
window 就是全局
1
2
3
4
5
6
预编译发生在函数执行前一刻
函数预编译
1.创建AO对象
2.找形参和变量声明,将便变量和形参名作为 AO 属性名,值为 undefined
3.将实参值和形参统一
4.在函数体里面找函数声明,值赋予函数体
1
2
3
4
全局预编译
1.创建GO对象
2.找变量声明,将便变量作为 GO 属性名
3.在函数体里面找函数声明,值赋予函数体
解释执行
作用域
1 | 函数每次执行时对应的执行上下文都是独一味二的,多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,它所产生的执行上下文被销毁 |
闭包
1 | 内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露。 |
立即执行函数
1 | 针对初始化功能的函数 |