什么是闭包?闭包是指那些能够访问 自由变量 的函数。
自由变量:是指在函数中使用的,但既不是函数参数也不是函数局部变量的变量。
闭包的作用:
1.创建私有变量
2.延长变量的生命周期:一般函数的词法环境在函数返回后就被销毁,但是闭包会保存对创建时所在词法环境的引用,即便创建时所在的执行上下文被销毁,但创建时所在词法环境依然存在,以达到延长变量的生命周期的目的。( 也就是说只要闭包函数引用不断,变量就会一直存在 )
闭包使用场景
1、柯里化函数(避免频繁调用具有相同参数的函数,同时又可轻松复用。 其实说白了就是 封装一个高阶函数(函数里返回函数)也是闭包 )
2、使用闭包实现私有变量、方法(其实就是 模块的方式 ,现代化的打包最终其实就是每个模块的代码都是相互独立的)
3. 匿名自执行函数
4.缓存一些结果
下面是一个关于闭包的面试题
题干
实现
拓展:reduce() 方法接收一个函数作为累加器,将数组中的每个值(从左到右)开始缩减,最终计算为一个值(是个数递减,不是值)。
// 语法: array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
/*
@parms
total 必需。初始值, 或者计算结束后的返回值。
currentValue 必需。当前元素
currentIndex 可选。当前元素的索引
arr 可选。当前元素所属的数组对象。
initialValue 可选。传递给函数的初始值
*/
面试题二
实现一个柯里化函数