signed

QiShunwang

“诚信为本、客户至上”

2020-6:闭包(JavaScript)

2020/12/26 19:28:29   来源:
    let funs = []
    for(let i = 0; i < 3; i++){
      funs[i] = (function(i){
        // 注意此处是按值传递
        return function(){
          console.log('i:',i)
        }
      })(i)
    }
    /* 执行后形成闭包
    funs = [
      function(){ (i=0)
        console.log('i:',i)
      },
      function(){ (i=1)
        console.log('i:',i)
      },
      function(){ (i=2)
        console.log('i:',i)
      },
    ]
    */
    funs[0]() // 0
    funs[1]() // 1
    funs[2]() // 2

    function fun(){
      for(let i = 0,arr = []; i < 3; i++){
        arr[i] = function(){
          console.log('i',i)
        }
      }
      return arr
    }
    let funs1 = fun()
    /*
    外层函数被调用1次,执行后形成一个闭包
    */
    funs1[0]() // 3
    funs1[1]() // 3
    funs1[2]() // 3