Skip to content

闭包

December 1, 2022 | 02:05 AM

闭包

闭包简述

闭包是什么

概述的话,闭包是指有权访问另一个函数作用域中变量的函数

闭包产生的原因

内部的函数存在外部作用域的引用就会导致闭包

代码演示

闭包一共分为两种情况:

//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中使用闭包等。