JavaScript教程:闭包

提出问题

实现一个累加函数,每次调用该函数时,传入一个数字,都可以进行累加,如下:

var sum = 0;
function leijia(x){
    sum +=x
    console.log("累加结果:",sum)
}
leijia(1)
leijia(2)
leijia(3)

缺点

这里使用了全局变量 sum,要避免使用全局变量,详见 链接

解决方法一:不使用全局变量

不使用全局变量,无法记住累加结果

解决方法二:使用闭包

闭包

闭包的必要条件:

  1. 外部函数必须 返回 一个 函数对象
  2. 返回的函数对象内,必须引用 外部函数形参局部变量

返回的函数就称为: 闭包

注意:

  1. 不是全局变量
  2. 返回的函数对象内,不一定要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)

应用场景

JavaScript:循环绑定事件-封装函数、闭包解决


原文出处:https://malaoshi.top/show_1IX3mLZ4vtNG.html