闭包是函数和声明该函数的环境的组合,简言之,函数可以访问范围内的任何变量或创建的环境
闭包类似私有方法,私有方法只能被同一类的其他方法调用,但是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());