关于闭包的概念 我们首先来查看一下MDN官方文档
这个概念说的太过于官方了,理解起来不是那么容易
我所理解的闭包 可以解析为以下两种:
-
闭包 是一个 访问其他函数内部变量 的 函数
-
闭包= 函数 + 上下文引用(局部变量) 闭包是这两个的组合
这里要强调的是 闭包是一个组合 而不是说,只是一个函数
举个简单的例子:
<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++){ }