闭包的几个例子

记录关于闭包的几个例子,网上介绍闭包文章很多,暂时就不作解释。

1.作用域链的延伸
    var global = 1;
    function outer(){
        var outer_local = 2;
        function inner(){
            var inner_local = 3;
            return inner_local + outer_local + global;
        }
        return inner();     //必须return出去
    }

    inner();    // 6
2.全局函数占位符
var inner;  //placeholder
var F = function(){
    var b = 'local variable';
    var N = function(){
        return b;
    }
    inner = N;
}

F();
inner();   // 'local variable'
3.函数参数
function F(param){
    var N = function(){
        return param;
    };
    param++;
    return N;
}

var inner = F(123);
inner();   // 124
4.循环中的闭包
function F(){
    var arr = [], i;
    for(i = 0; i < 3; i++){
        arr[i] = function(){
            return i;
        };
    }
    return arr;
}

var arr = F();
arr[0]();  // 3;
arr[1]();  // 3;
arr[2]();  // 3;

正常输出0,1,2的方式:

function F(){
    var arr = [], i;
    for(i = 0; i < 3; i++){
        arr[i] = (function(x){
            return function(){
                return x;
            }
        }(i));
    }
    return arr;
}
5.迭代器中的闭包
function setup(x){
    var i = 0;
    return function(){
        return x[i++];
    }
}

var next = setup(['a','b','c']);
next();  // 'a'
next();  // 'b'
next();  // 'c'

这些问题如果都理解,那么闭包应该算是比较理解了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值