闭包的几个例子:
function complement(PRED) {
return function() {
return !PRED.apply(null, arguments);
}
}
function isEven(n) {
return (n%2) === 0;
}
var isOdd = complement(isEven);
isOdd(2); // => false
isOdd(13);
变量的捕获发生在创建闭包的时候,isOdd不会察觉isEven。
另外一个例子:
function showObject(OBJ) {
return function() {
return OBJ;
}
}
var o = {1 : 1};
var showO = showObject(o);
showO(); // => Object {1:1}
o的引用同时存在于闭包内部和外部的情况,修改o会有什么效果?
o.newField = 10;
showO(); // => Object {1: 1, newField: 10}
作为私有变量的o被可能意外修改,为了避免,需要把捕获变量私有:
var foo = (function() {
var PRIVATE = 1;
return {
inc: function(n) {
return PRIVATE += n;
}
}
})();
foo.inc(1); // => 2