理解JS中的闭包

97 阅读1分钟

关于闭包的概念 我们首先来查看一下MDN官方文档

image.png 这个概念说的太过于官方了,理解起来不是那么容易

我所理解的闭包 可以解析为以下两种:

  • 闭包 是一个 访问其他函数内部变量函数

  • 闭包= 函数 + 上下文引用(局部变量) 闭包是这两个的组合

这里要强调的是 闭包是一个组合 而不是说,只是一个函数

举个简单的例子:

<script>
        // 函数声明
        function fn() {
            let num = 10
            //fn1  + num变量  的组合是一个闭包
            function fn1() {
                console.log(num)
            }
            // 调用函数
            fn1()
        }
        
        
        // 调用函数
        fn()
    </script>

简单说来, fn1 访问了 fn的局部变量 则称 fn1和num这个变量 的组合 为闭包

通常,我们使用闭包 主要是为了避免全局变量污染

补充: 变量的作用域分为 全局作用域,局部作用域 和 块级作用域

全局作用域(全局变量) : 在函数外面声明的变量

局部作用域(局部变量) : 在函数里面声明的变量

块级作用域(快级变量) : 在分支或循环大括号中let的变量

例如: 块级变量

 for(let i=1;i<=5;i++){  }