闭包
定义
函数嵌套,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,就把这个使用外部函数变量的内部函数成为闭包。
构成条件
1.函数嵌套
2.内部函数使用了外部函数的变量(包括外部函数的参数)
3.外部函数返回内部函数
function outerFunction() { let outerVariable = '我在outer函数里!'; function innerFunction() { console.log(outerVariable); } return innerFunction; } const innerFunc = outerFunction(); innerFunc(); // 输出: 我在outer函数里
function a(){ function b(){ var bb = 888 console.log(aa); //输出:666 } var aa = 666 return b } var demo = a() demo()
在上面的代码示例中,a函数定义了一个名为aa的变量和一个名为b的函数,b函数引用了aa变量,因此JavaScript引擎会保留a函数的作用域链,b函数可以访问a函数的执行上下文,b函数内用到了外部函数a的变量aa,在a函数调用结束后该函数执行上下文会销毁,但会保留一部分留在内存中供b函数使用,这就形成了闭包。
具体来说,当内部函数引用外部函数的变量时,外部函数的作用域链将被保留在内存中,以便内部函数可以访问这些变量。
这种函数嵌套和变量共享的方式就是闭包的核心概念。当一个函数返回另一个函数时,它实际上返回了一个闭包,其中包含了原函数定义时的词法作用域和相关变量。