JavaScript中闭包的使用例子

来源:互联网 发布:海外网络推广 编辑:程序博客网 时间:2024/06/13 05:40

最近看了一本叫《JavaScript设计模式与开发实践》的书,这本书在讲JavaScript实现的设计模式之前先讲了了JavaScript的闭包和高阶函数的知识,感觉十分受用。

闭包的概念很难懂,自己以前的理解就是可以在外部访问函数内部的局部变量。通过几个例子加深理解:

    var func = function () {                var a = 1;                console.log(a++);            }    func();     //输出1    func();     //输出1

      每次执行完一次func,局部变量都会被销毁。

使用闭包:

var func = function () {          var a=1;                return function (){                    a++;                    console.log(a);                };            }            f = func();            f();    //2            f();    //3            f();    //4            f();    //5
每次调用f()之后,变量a并没有消失。



闭包的应用:

1、封装变量:

有求连乘函数如下:

    var mult = function () {                var a=1;                for(var i=0,l=arguments.length;i<l;i++){                    a = a*arguments[i];                }                return a;            }

可以用闭包将其改为性能更加好的形式:

var mult = (function () {                var cache = {};                var cal = function () {                    var a=1;                    for(var i=0,l=arguments.length;i<l;i++){                        a = a*arguments[i];                    }                    return a;                }                return function () {                    var args = Array.prototype.join.call(arguments,',');                    if (args in cache) {                        return cache[args];                    }                    return cache[args] = cal.apply(null,arguments);                    //why not 'call(arguments)': because it is only one parameter: [arguments].                }            })();
    console.log(mult(1,2,3));//输出6
console.log(mult(1,2,3));//输出6

                                             
0 0
原创粉丝点击