闭包与循环的结合

闭包应用的循环中:能存储异步的每次数据。

//例一:
    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;

posted @ 2016-10-17 11:24  盖大楼  阅读(114)  评论(0编辑  收藏  举报