闭包
闭包简述
闭包是什么
概述的话,闭包是指有权访问另一个函数作用域中变量的函数
闭包产生的原因
内部的函数存在外部作用域的引用就会导致闭包
代码演示
闭包一共分为两种情况:
//1.函数作为返回值
function test() {
const a = 1;
return function() {
console.log('a', a)
}
}
const fn = test()
const a = 2;
fn()
//a 1
// 2.函数作为参数
function test(fn) {
const a = 1;
fn()
}
const a = 2;
function fn() {
console.log('a', a);
}
test(fn)
//a 2
在当前函数作用域里,并没有定义变量a(自由变量),会从
上一级作用域
里开始查找,是从他定义
的地方开始向上查找,而不是他被引用的地方
闭包的作用
- 保护函数的私有变量不受外部的干扰。形成不销毁的栈内存。
- 保存,把一些函数内的值保存下来。闭包可以实现方法和属性的私有化
闭包形成的原理
作用域链,当前作用域可以访问上级作用域中的变量
闭包解决的问题:
能够让函数作用域中的变量在函数执行结束之后不被销毁,同时也能在函数外部可以访问函数内部的局部变量。
闭包带来的问题
由于垃圾回收器不会将闭包中变量销毁,于是就造成了内存泄露,内存泄露积累多了就容易导致内存溢出。 加分回答 闭包的应用,能够模仿块级作用域,能够实现柯里化,在构造函数中定义特权方法、Vue中数据响应式Observer中使用闭包等。