什么是闭包?闭包的简介

98 阅读2分钟

一、闭包

我们先看一段简单的代码

// 定义一个函数fn
    function fn() {
        // 定义一个变量count,赋值10
            let count = 10
            // 返回一个函数
             // 里层函数作为事件处理函数
            return function() {
                // count传过来的时候是10
                count++
                // 自增变成11
                console.log(count);//输出11
            }
        }
        // 这里fn()返回的是一个函数(上面return后面的),将这个函数赋值给放f1
        let f1 = fn()
        // 调用f1函数
        f1()

我们再看看闭包的概念吧,简单来说闭包就是能够获取其他函数内部变量的函数。

作用:

  1. 相当于延长变量的作用域
  2. 创造一个私有化的环境

闭包的典型特征:

  1. 函数存在一个内部函数
  2. 内部函数以返回值的形式存在
  3. 内部函数调用了外部函数的变量

我们再看看上面的代码里层的函数是以返回值的形式存在。我们把这个函数就叫做闭包。

闭包里面里面并没有count,那么这个count是从何而来呢?显而易见这个函数是从外层的函数里面得到的。这就是闭包的一个作用,延长变量的作用域。

为什么要延长作用域呢?这个就要说到垃圾处理由于垃圾处理机制的存在,当我们在函数中声明一个变量也就是相当于开辟了一个空间,会占用内存,当我们执行这个函数后,这个空间就会被销毁从而释放内存。函数里面的这个变量的作用域就是当前的这个函数的作用域。 不在这个函数的作用域内就无法使用这个变量了。