闭包

参考http://mp.weixin.qq.com/s?__biz=MjM5MTA1MjAxMQ==&mid=2651226038&idx=1&sn=636aa6089bb12c9431262129c42ea958&chksm=bd49a6328a3e2f24a872fad076cf22ed39a2f11a64864659eaacede0714025724e97af32e789&mpshare=1&scene=1&srcid=0303JTxM6ii1Pd6MF2064rAp#rd

参考https://medium.freecodecamp.com/lets-learn-javascript-closures-66feb44f6a44#.ysftb7j8k

闭包有很多实际用处。其中一个重要的用处就是在外部作用域下维护一个私有变量.

当函数需要外部变量的时候就可以考虑了

  var result = [];
  for (var i = 0; i < 2; i++) {
    result[i] = function() {
      console.log(i)
    }
  }

  result[0](); // 1
  result[1](); // 1


  // 闭包
  for (var i = 0; i < 2; i++) {
    result[i] = (function(para) {
      return function() {
        console.log(para)
      }
    })(i)
  }


  // let
  var result = [];
  for (let i = 0; i < 2; i++) {
    result[i] = function() {
      console.log(i)
    }
  }

再来个demo

实现   add(1)(2)(3)=>结果是6

function add(a) {
    return function(b){
        return function  (c) {
            return a+b+c
        }
    }
}
原文地址:https://www.cnblogs.com/2han/p/6497608.html