在知乎提了个问题:有哪些关于闭包的经典用法?。无人回答,发到这里,大家一起来讨论讨论!
看 JavaScript 等方面的书,在讲解闭包时,经常提到“如果用好闭包,能多么多么方便,多么多么牛逼”。但是,我自己在写代码的时候,总是找不到这种“牛逼的赶脚”。(也许我水平有限,还没吃透。呵呵)
请问,有哪些关于闭包的经典用法?
请结合 JavaScript代码
来说明。无码无真相!
(function(win, jq, undefined){
jq(function($){
console.log($(document));
});
})(window, jQuery);
说多么多么牛逼的是为了装逼,正式项目中把成熟框架活学活用就够了,真正牛逼的程序员不需要通过各种装逼的写法来显示自己有多牛,而是用最简单的大家都能懂方式化腐朽为神奇。不过闭包的工作原理还是应该理解的,这样可以明白 javascript 的底层工作方式。
隐藏内部变量
counter = (function(){
var count = 0
return function(){
console.log(count += 1)
}
})()
counter()
counter()
其实主要就是用来封装啦,或者说是像 #6 说的那样,隐藏内部变量。
类似的例子:
var logger_a = (function () {
var buffer = [];
return {
put: function (c) {
buffer.push(c);
return this;
},
toString: function () {
return buffer.join('');
}
};
}());
用的时候就是 logger_a.put('dsfasd')
这样。
当然,不用闭包也一样可以,例如(不知道有没有写错……):
function Logger() {
var buffer = [];
this.put = function (c) { buffer.push(c); return this; }
this.toString = function () { return buffer.join(''); }
}
var logger_b = new Logger();
这个也是一样用。
currying:
var add = function(a) {
return function(b) {
return a + b;
}
}
a(1)(2);