闭包是什么?
    闭包就是一个函数和这个函数内部能访问到的变量的组合。

    闭包的作用是什么?

    1. 隐藏变量(变量私有化)
    2. 变量持久化

    一个具体的例子:
    比如玩马里奥。一开始有两条命,吃一个蘑菇加一条命,死一次减一条命。
    我现在要实现这个功能,并做到有效的防止作弊器能够随意的修改命的数量(隐藏变量),还要做到在其他的js能够使用命数和加减。

    1. var lifeControl = {};
    2. (function(){
    3. var lifes = 2 // 初始生命数量
    4. lifeControl.addLife = function(){
    5. lifes++ // 生命数加一
    6. console.log(`当前生命值:${lifes}`)
    7. }
    8. lifeControl.reduceLife = function(){
    9. lifes-- // 生命数减一
    10. console.log(`当前生命值:${lifes}`)
    11. }
    12. lifeControl.getLife =function(){
    13. return lifes // 获取生命数
    14. }
    15. })()

    这样能达到什么效果?

    1. 直接获取lifes

    image.png
    报错,所以在函数外部是拿不到的

    1. 通过lifeControl操作lifes

    image.png
    没有问题。而且lifes是持久化的,并没有在函数执行完后被回收。