在了解闭包之前要先知道什么是作用域?
全局作用域下声明的变量为全局变量,局部作用域下声明的变量为局部变量,局部作用域也分为函数作用域以及块级作用域,就因为这些作用域链的存在,函数内部能访问全局变量,而一个函数不能访问另一个函数的变量,这时闭包就出现了。
是什么是闭包?
闭包就是内层函数访问了外层函数的变量 -------- 闭包就是函数(必须满足这两个条件)
<script>
// 全局作用域下的函数
function f() {
// 函数f内部的变量
const num = 20
// 内层函数
function g() {
console.log(num); //20
}
g()
}
f()
</script>
闭包的作用: 可以让函数外面访问函数内部的变量 (不能直接访问,需要通过函数调用的形式)
闭包的应用: 数据私有化
function fn() {
let num = 10 // 只能在函数里面使用,外面看不到---- 数据私有化
return function g() {
num++
console.log(num);
}
}
const res = fn() // res就是一个函数
res() // 11 通过闭包,我们可以用函数调用的形式,去访问函数内部的变量
res() // 12
res() // 13