什么是闭包
在一个函数内部声明函数,内部函数引用外部函数的变量,就称为闭包。
function fn(){
let x = 'hi';
say(){
console.log(x)
}
}
但是如果不将内部函数返回是没有意义的
function fn(){
let x = 'hi';
say(){
console.log(x)
}
return say
}
隐藏局部变量,暴露操作函数。
const createAdd = ()=>{
let n = 0
return ()=>{
n += 1
console.log(n)
}
}
const add = createAdd()
add() // 1
add() // 2
闭包的用途
- 外部作用域获取函数作用域内的变量
- 封装私有属性
- 防止变量污染全局
- 迭代器
闭包的缺点
缺点,容易内存泄露。注意,虽然闭包并不会造成内存泄露,真实原因是 JS 引擎的实现有问题。