闭包的几个例子

纪录关于闭包的几个例子,网上引见闭包文章许多,临时就不作诠释。

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'

这些题目假如都明白,那末闭包应当算是比较明白了

    原文作者:芒果屋里的猫
    原文地址: https://segmentfault.com/a/1190000008641219
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞