闭包
闭包简单来说就是函数内部嵌套函数,内部函数可以访问外部函数的变量。
1、闭包的作用
- 闭包就是能够读取其他函数内部变量的函数。
- 闭包是将函数内部和函数外部连接起来的桥梁。
- vue中的data就是一种闭包的形式。闭包作为回调函数,可以实现函数的复用
2、优点缺点
优点:
1.长期驻留内存,可以缓存数据
2.可以重复使用变量,不会造成变量污染
缺点:
1.占内存、
2.对捕获的变量是引用,不是复制
3.父函数每调用一次会产生不同的闭包.
3、闭包是如何产生的
作用域运用的特殊情况,有两种表现
1.函数作为参数被传递
2.函数作为返回值被传递
// 函数作为返回值
function create() {
const a = 100
return function () {
console.log(a)
}
}
const fn = create()
const a = 200
fn() // 100
// 函数作为参数被传递
function print(fn) {
const a = 200
fn()
}
const a = 100
function fn() {
console.log(a)
}
print(fn) // 100
注意:函数中的自由变量,取决于函数定义的地方,跟执行的地方没关系