闭包与循环的结合
闭包应用的循环中:能存储异步的每次数据。
//例一: function constfunc(v){ return function(){ return v; }; }; var funcs=[]; for(var i=0;i<10;i++){ funcs[i]=constfunc(i)(); }; console.log(funcs[7]); //输出7 //对比上面的函数 //例二: function constfuncs(){ var funcs=[]; for(var i=0;i<10;i++){ funcs[i]=function(){ return i; }; }; return funcs; }; var funcs=constfuncs(); console.log(funcs[1]()); //输出10
上面的例子 例一返回每次存储的值;而例二则都是返回10;
闭包的作用域链都是‘活动的’,嵌套的函数不会将作用域内的私有成员复制一份;也不会对绑定的变量生成静态快照。
第二点:
this是关键字,(每个函数调用都包含一个this值)。闭包在外部函数里是无法访问this的,除非外部函数将this转存为一个变量:var that=this;
arguments并不是关键字,但是调用函数时都会自动声明它,由于闭包具有自己绑定的arguments,因此闭包无法直接访问外部函数的参数数组,除非外部函数将arguments保存在另一个变量中: var otherArguments=arguments;