/**
* 闭包--函数内定义函数,返回子函数(函数外的变量引用函数内的函数)
*
* 实例函数对象(--对象未释放,被保存在内存中,内部变量的值始终保持在内存中)
*
* 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(); //只实例化一次,对象被保存在内存中;