闭包的官方解释是:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域。
简单意思就是:闭包=内层函数+外层函数的引用
function outer(){
//上层代码的引用
const a=1
//内层代码
function f(){
conso.log(a)
}
f()//调用
}
outer()//调用
细心的已经发现了,怎么样在外部直接调用内部呢?直接调用肯定不行,这个时候就需要用return了
function outer(){
//上层代码的引用
let a=1
//内层代码
return function f(){
conso.log(a)
}
f()//调用
}
const fn=outer()
fn()
//调用
这样写的话就可以把里面的值return出来,外面就可以直接调用啦!
闭包的私有化怎么实现?
举个栗子:(普通函数)
//统计调用的次数
let i=0;
function fn(){
i++
console.log("调用了i次")
}
fn()//结果为1
fn()//结果为2
//但是如果我修改了i的值呢?
let i=1000
fn()//这个值为多少呢?思考一下=>答案为1001 因为let为全局变量,修改let值会影响console.log的值
但如果是以闭包的形式呢?
function fn(){
let count=1
function fun(){
count++
console.log("i")
}
return fun
}
const resule=fn()
这样写的话就是避免修改值从而影响结果了,就比如说我有一个打火机,别人可以借来用,但是别人不能给顺走了。带入到代码中来就是实现了闭包的私有化。