var db = (function() {// 创建一个隐藏的object, 这个object持有一些数据// 从外部是不能访问这个object的var data = {};// 创建一个函数, 这个函数提供一些访问data的数据的方法return function(key, val) { ???if (val === undefined) { return data[key] } // get ???else { return data[key] = val } // set ???}// 我们可以调用这个匿名方法// 返回这个内部函数,它是一个闭包})();db(‘x‘); // 返回 undefineddb(‘x‘, 1); // 设置data[‘x‘]为1db(‘x‘); // 返回 1// 我们不可能访问data这个object本身// 但是我们可以设置它的成员
1.当function里嵌套function时,内部的function可以访问外部function里的变量。
2. 外部变量(环境变量?),
包括:
2.1 全局变量,包括DOM。
2.2 外部函数的变量或函数。
如果一个函数访问了它的外部变量,那么它就是一个闭包。
从技术上来讲,在JS中,每个function都是闭包,因为它总是能访问在它外部定义的数据。
没return的闭包:
function closureExample() { ???????????var temp = 10; ???????????setTimeout(function () { ???????????????console.log(++temp); ???????????}, 1000); ???????} ???????closureExample()
闭包实例:
?function demo() { ???????????var temp = 5; ???????????function add() { ???????????????console.log(temp++); ???????????} ???????????return add; ???????} ???????var demeInstance = demo(); ???????//console中调demeInstance,temp就一直加
js 闭包实例
原文地址:http://www.cnblogs.com/gaocong/p/7464512.html