闭包的应用场景有哪些?

了解下闭包的应用场景,一起看下吧。

//场景1:保存现场。如果不进行捕获则不会正确弹出li节点对应的文本值

        var li = document.getElementsByTagName("li");

        for(var i=0;i<li.length;i++){

        li[i].onclick=(function (i) {

            return function () {

                alert(li[i].firstChild.nodeValue);

            }

        })(i);

    }

//场景2:封装。保证外部直接访问不到变量num但可以通过 setNum和getNum方法类似于java里的私有变量。

        (function () {

            var num =0;

            function getN() {

                return num ;

            }

            function setN(x) {

                num=x;

            }

            window.getNum=getN;

            window.setNum=setN;

        })();

        alert(getNum());

        setNum(12);

        alert(getNum());

// 场景3:减少全局变量 如果不使用闭包使a自增则需要将a变量放到外部

        function foo2() {

            var a = 0;

            return function foo3() {

                a++;

                alert(a);

            }

        }

        var foo4 = foo2();

        foo4();

        foo4();

        // 场景4:性能优化:减少函数定义时间和内存消耗

        // 如果add函数越复杂则减少的时间就越多

        var sum = (function() {

         var add = function(i, j){

           return i+j;

         }

         return function(i,j) {

           add(i, j);

         }

        })()

        var startTime = new Date();

        for(var i = 0; i< 1000000; i++) {

         sum(1,1);

        }

        var endTime = new Date();

        console.log(endTime - startTime);
  • 暂无回复内容