javascript闭包-2

xiaoxiao2022-06-12  24

这是从javascript王者归来里摘抄的例子,用来说明一下闭包!

第一个例子

function A(a){                  //普通函数    return a;}function B(b){    return function(){        //这里的函数是闭包,随B函数的调用而创建        return b;    }}var x = A(10);                  //普通调用var y = B(20);                  //返回的是闭包函数,没有被调用var z = B(30);                  //返回的是闭包函数,没有被调用alert(x);                           //返回10,并且调用的堆栈被销毁alert(y());                        //返回20,这里是真正调用闭包的地方,在调用B函数时,闭包函数没有随B函数的结束而

                                       //销毁alert(z());                        //返回30,这里是调用的新创建的闭包。

 

 

 

第二个例子

function counter(a,b){    return function(){               //这个闭包会动态修改a的值        a = a+b;        return a;    }

    //return function(){            //这个闭包会动态修改b的值    //    b = a+b;    //    return b;    //}

}var c1 = counter(5,6);           //初始值传入5,6for(var i =0;i<2;i++){                alert(c1());                        //这里循环两次打印值为(第一种情况)11、17,第一次是5+6,第二次由于闭包将a

                                             //的值改变为第一次的相加结果11,这是我们初始传入的b为6,那么就变成了11+6}alert(c1());                            //23,这里又一次调用,情况与上面相同

 

 

第三个例子

function ClassA(a){    function _a(){                         //私有函数,外环境不能调用        return a;    }    this.mes = function(){            //通过内部对象可以调用内部私有函数        return "hello "+_a();    }}var obj = new ClassA("god");    //传入字符串alert(obj.mes());                        //通过产生的闭包调用函数//下面两种方法都不能够访问到_a()函数

alert(ClassA._a());

alert(obj._a()); 

 

 

第四个例子

function test(){    for(var i = 0;i<5;i++){        (function(j){                                               //闭包函数,这里改为alert(j),效果一样            setTimeout(function(){alert(j)},500);    //内部又有个闭包函数,嵌套        })(i);                                                          //i为传入的形参,   }

}test();  //输出 0,1,2,3,4

转载请注明原文地址: https://www.6miu.com/read-4933909.html

最新回复(0)