提出问题
实现一个累加函数,每次调用该函数时,传入一个数字,都可以进行累加,如下:
var sum = 0;
function leijia(x){
sum +=x
console.log("累加结果:",sum)
}
leijia(1)
leijia(2)
leijia(3)
缺点
这里使用了全局变量 sum,要避免使用全局变量,详见 链接
解决方法一:不使用全局变量
不使用全局变量,无法记住累加结果
解决方法二:使用闭包
闭包
闭包的必要条件:
- 外部函数必须 返回 一个 函数对象
- 返回的函数对象内,必须引用 外部函数 的 形参 或 局部变量
返回的函数就称为: 闭包
注意:
- 不是全局变量
- 返回的函数对象内,不一定要return
闭包的作用:不使用全局变量,就可以保存函数内的 局部变量
使用闭包解决上面的问题
function lj(){
var sum = 0;
return function (x){
sum +=x
console.log("累加结果:",sum)
}
}
var leijia = lj()
leijia(1)
leijia(2)
leijia(3)
缺点:需要通过代码调用该函数
解决:闭包结合自调用函数
闭包结合自调用函数
var leijia = (function (){
var sum = 0;
return function (x){
sum +=x
console.log("累加结果:",sum)
}
})()
leijia(1)
leijia(2)
leijia(3)