天天看点

闭包 立即执行函数

举例说明

闭包 立即执行函数

打印结果 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函数中的   的劳动成果   

闭包 立即执行函数
闭包 立即执行函数

继续阅读