JS中的闭包是什么

要弄懂闭包是什么,咱们须要先了解闭包的做用。javascript

那么闭包的做用是什么?    ---保护变量。java

假设咱们设计一个游戏,人物的血量设置为100。那么咱们能够这样写:闭包

var HP = 100
        function 被砍() {
            HP -= 50
            return HP
        }

能够看到,HP是一个全局变量,很容易被修改,一不当心直接改为-1000000怎么办呢?或者咱们能够把它放在一个函数里,成为局部变量,但咱们在其余地方访问不到。那么如今咱们就能够来用闭包了。函数

为了隐藏变量HP,咱们先在外面定义一个函数:spa

function 英雄() {
            var HP = 100
            function 被砍() {
                HP -= 50
                return HP
            }
        }

变量HP已经变为局部变量,外界访问不了HP,也没法修改它。但在被砍的时候,咱们须要知道本身的血量,这就要求咱们能够访问,但不能修改HP。设计

为了对外提供接口,咱们能够这样写:code

function 英雄() {
            var HP = 100
            function 被砍() {
                HP -= 50
                return HP
            }
            return 被砍// 这个格式能够将 被砍 这个函数做为开放接口,使外界访问
        }

也能够这样:接口

        function 英雄() {
            var HP = 100
            window.被砍 = function () {
                HP -= 50
                return HP
            }
        }

以上两种方法都保护了变量HP,同时HP也能够被外部访问,但不能被更改。游戏

这就是闭包。ip