闭包

149 阅读1分钟

什么是闭包?

在JavaScript中,在函数中(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则产生闭包;或者说闭包的本质就是一个函数内部嵌套另外一个函数,在调用这个函数时,内部函数会临时创造一个空间,在外层函数执行完毕的时候,空间内的数据因为还存在着引用关系所以不会被回收机制回收,而内部函数创建的这个空间就是一个闭包,闭包简单来说就是一个封闭的,外部无法直接访问的一个空间,只要有函数就会有闭包

闭包的作用

保护私有变量不被修改

闭包解决的问题

闭包解决的问题就是函数内的数据不允许外界访问

我们可以通过返回内嵌的函数来解决这个问题

  • set函数可以修改函数内部的值,不需要返回值
  • get函数可以获取函数内部的值并且返回,且修改不了函数内部的值

演示代码:

function outer() {
        let num = 100

        // 添加函数
        // 获取值
        function get() {
          return num
        }
        // 设置值
        function set(value) {
          num = value
        }
        // 返回两个函数:简洁写法
        return { get, set }
      }

      // 外部想获取和赋值
      let obj = outer()
      console.log(obj)
      console.log(obj.get()) // 100
      obj.set(50)
      console.log(obj.get()) // 50

代码结构:

图片.png