2.常见的闭包

<body>
  
  <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()执行几次没有关系。因为执行外部函数时,执行了内部的函数定义,产生了变量。

你可能感兴趣的:(2.常见的闭包)