5分钟学会函数闭包Closures

89 阅读1分钟

闭包是函数和声明该函数的环境的组合,简言之,函数可以访问范围内的任何变量或创建的环境

闭包类似私有方法,私有方法只能被同一类的其他方法调用,但是JavaScript没有这样的机制,所以可以使用闭包模拟私有方法。


// 闭包是函数和声明该函数的环境的组合,简言之,函数可以访问范围内的任何变量或创建的环境
function makeFunc() {
  var name = "JS Nuggets";
  function displayName() {
    console.log(name);
  }
  return displayName;
}

var myFunc = makeFunc();
myFunc();

// 类似私有方法,私有方法只能被同一类的其他方法调用,但是JavaScript没有这样的机制,所以可以使用闭包模拟私有方法,
var counter = (function() {
  var privateCounter = 0;
  function changeBy(val) {
    privateCounter += val;
  }
  return {
    increment: function() {
      changeBy(1);//increment可以访问changeBy是因为他在创建的环境中,这归功于JS的词法作用域
    },
    decrement: function() {
      changeBy(-1);
    },
    value: function() {
      return privateCounter;
    }
  };   
})();

console.log(counter.value());
counter.increment();
counter.increment();
console.log(counter.value()); 
counter.decrement();
console.log(counter.value());