总结
定义:闭包可以让一个函数访问并操作其声明时的作用域中的变量和函数,并且,即使声明时的作用域消失了,也可以调用
应用:
1.私有变量
2.回调与计时器
3.绑定函数上下文
4.偏应用函数
5.函数重载:缓存记忆、函数封装
6.即时函数:独立作用域、简洁代码、循环、类库封装、通过参数限制作用域内的名称
正文
闭包的定义说法如下:
1、只要能访问外部变量的就是闭包,
2、所有函数都是闭包。
3、保护一个可重用的局部变量的词法结构
4、忍者秘籍-- 闭包是一个函数在创建时允许该自身函数访问并操作该自身函数之外的变量时所创建的作用域
5、闭包可以让一个函数访问并操作其声明时的作用域中的变量和函数,并且,即使声明时的作用域消失了,也可以调用
注意的是:闭包不是在创建的那一时刻点的状态的快照,而是一个真实的封装,只要闭包存在,就可以对其进行修改。
最简单的闭包:
// 全局作用域就是一个闭包
var outerVal = 'lifan'
function oterFn(){
console.log(outerVal)
}
outerFn() // lifan
新的闭包说明:
1.闭包一定是函数对象
2.闭包和词法作用域,作用域链,垃圾回收机制息息相关
3.当函数一定是在其定义的作用域外进行访问时,才产生闭包
4.闭包是由该函数和其上层执行上下文共同构成