<body>
  <!--

    1.将函数作为另一个函数的返回值
    2.将函数作为实参传递给另一个函数调用

  -->
  <script>
    //1.将函数作为另一个函数的返回值
    function fn1(){
      var a = 2
      function fn2(){
        a++;
        console.log(a)
      }
      return fn2
    }
    var f = fn1()  //闭包产生了
    f() //3     f是调用内部函数,不是外部函数
    f() //4
    //请问整个过程中创建几个内部函数对象?一个!!!  内部函数是执行函数,并不是创建函数
  
  //看闭包对象创建几个,就看你外部函数对象执行几次,因为创建外部函数对象,才会去创建内部函数对象,和内部函数执行几次没有关系,也就是和f()执行几次没有关系。因为执行外部函数时,执行了内部的函数定义,产生了变量。
    
   
//2.将函数作为实参传递给另一个函数调用

    function showDelay(msg,time){
      setTimeout(function(){
        alert(msg)
      },time)
    }
    showDelay('fds',2000)

    //内部函数function(){alert(msg)}闭包里面有msg,如果没有msg,就没有闭包


  </script>
  
</body>
看闭包对象创建几个,就看你外部函数对象执行几次,因为创建外部函数对象,才会去创建内部函数对象,和内部函数执行几次没有关系,也就是和f()执行几次没有关系。因为执行外部函数时,执行了内部的函数定义,产生了变量。

相关文章:

  • 2022-12-23
  • 2021-12-25
  • 2022-12-23
  • 2021-05-21
  • 2021-08-03
  • 2022-01-25
猜你喜欢
  • 2021-06-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-26
  • 2022-12-23
  • 2021-11-22
相关资源
相似解决方案