闭包

定义

函数嵌套,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,就把这个使用外部函数变量的内部函数成为闭包。

构成条件

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函数使用,这就形成了闭包。

具体来说,当内部函数引用外部函数的变量时,外部函数的作用域链将被保留在内存中,以便内部函数可以访问这些变量。

这种函数嵌套和变量共享的方式就是闭包的核心概念。当一个函数返回另一个函数时,它实际上返回了一个闭包,其中包含了原函数定义时的词法作用域和相关变量。

 
posted on 2024-06-05 10:50  zy89898976  阅读(7)  评论(0编辑  收藏  举报