举例说明

打印结果 101 102 当时疑惑 第一次demo执行完毕 执行期上下文被释放 第二次应该打印undefiend
错误认识 第一次执行完毕 销毁的执行器上下文 为b函数自己的执行期上下文 但是他无法销毁 来自于A的执行期上下文
故其打印仍是a函数执行期上下文中 的值 该AO一直为b函数所有 b执行完回归到b被定义的状态
闭包概念
当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露
闭包作用
累加器
可以做缓存
打印出 eating banana
立即执行函数
定义:此类函数没有声明,在一次执行过后即释放。适合做初始化工作。 主要针对初始化函数
定义形式
(function abc() {
........
}())
返回值直接用变量去接
这叫函数 声明 不叫表达式 所以会报语法解析错误
这个叫做函数 表达式 可以执行
这要将函数声明变成表达式就可以执行
function test() {
console.log(12212);
}(1,2,3,4)
理论上将绝不可以这杨 但是实际上不报错 系统识别为 函数声明 和 (1,2,3,4)两部分
最常见的闭包现象
每一次for循环 将数组每一位赋值为一个函数
每一个对应的i都保存在立即执行函数中的j 并且被返回到外部 此时闭包解决
解决原理 : 立即执行函数 将内部函数保存到test AO的数组中 再进一步 保存到 test函数外部
此时arr数组拿着立即执行函数的劳动成果 j
myarr函数拿着test中arr函数中的 的劳动成果