闭包

/**
 * 闭包--函数内定义函数,返回子函数(函数外的变量引用函数内的函数)
 *
 * 实例函数对象(--对象未释放,被保存在内存中,内部变量的值始终保持在内存中)
 *
 * 1.内部函数可以引用外部函数的变量或参数
 *
 * 2.返回内部函数(外部函数只实例一次,变量始终保存在内存中!)
 *
 * js回收机制--对象不被引用或两个对象相互引用,不被第三者引用.
 *
 * 定义在一个函数内的函数;返回子函数就可以访问局部的变量
 *
 * 闭包允许你访问存在于外部函数中的变量与参数,它并不是使用该变量创建时的值,相反,它使用外部函数中该变量最后的值
 *
 * 1.一个是前面提到的可以读取函数内部的变量;
 * 2.另一个就是让这些变量的值始终保持在内存中;
 *
 * 并没有被执行,只构建了一个函数体为”print(i);”的函数对象;
 * 而当i=4时,迭代停止,外部函数返回,当再去调用outter[0].invoke()时,i的值依旧为4
 *
 */

pAry[i].onclick = function(arg){
		return function(){
			alert(arg);
		}
	}(i);
	continue;
	(function(arg){
		var temp = i + "aa";
		pAry[i].onclick = function() {
			alert(temp);
		} 
	})(i)//闭包


function test(){
	var arr= ["one","two","three","four"];
	for(var i=0; i<arr.length;i++){
		var x = {};
		x.no = i;
		x.text = arr[i];
		x.initvo = function(arg){	//并没有被立即执行,而当i=4时,迭代停止,i的值依旧为4
			return function(){
				console.log(arg);
			}		
		}(i);
		outer.push(x);
	}
}
test();	//只实例化一次,对象被保存在内存中;
原文地址:https://www.cnblogs.com/xcai/p/3183309.html