js中闭包

来源:互联网 发布:淘宝禁止开店 编辑:程序博客网 时间:2024/06/04 23:31
闭包就是有权访问从函数外访问函数里定义的变量的函数。
1

function fn(){
        var a=2;
        function fn1(){
            alert(a);
        }
        return fn1;
    }
    var fn2=fn();
    fn2();


注意注意只有当调用有返回值建立引用时--函数里声明的函数的引用--才能才能调用函数里声明的函数



function fn(){
        var a=2;
        function fn1(){
            alert(a);
        }
    }
    var fn2=fn();
    fn2();


不返回函数名是建立不了引用的。
2


function fn(){
        var a=0;
        function fn1(){
            a++;
            console.log(a);
        }
        fn1();
        fn1();
    }
    fn();


闭包函数执行过程会被保存--闭包的重要特性--但滥用会内存溢出。
3



function createFunctions(){
        var result = new Array();
        for (var i=0; i < 10; i++){//当执行到最后一遍时i是10
            result[i] = function(){
                return i;//只有当函数执行时 i才被赋值 注意声明和调用是两个概念。
                //是闭包访问的函数里的i,只是要注意声明和调用的问题。
            };
        }
        return result;
    }
    var funcs = createFunctions();
    for (var i=0; i < funcs.length; i++){闭包就是有权访问从函数外访问函数里定义的变量的函数。
1
function fn(){
        var a=2;
        function fn1(){
            alert(a);
        }
        return fn1;
    }
    var fn2=fn();
    fn2();


注意注意只有当调用有返回值建立引用时--函数里声明的函数的引用--才能才能调用函数里声明的函数


function fn(){
        var a=2;
        function fn1(){
            alert(a);
        }
    }
    var fn2=fn();
    fn2();


不返回函数名是建立不了引用的。
2



function fn(){
        var a=0;
        function fn1(){
            a++;
            console.log(a);
        }
        fn1();
        fn1();
    }
    fn();


闭包函数执行过程会被保存--闭包的重要特性--但滥用会内存溢出。
3



function createFunctions(){
        var result = new Array();
        for (var i=0; i < 10; i++){//当执行到最后一遍时i是10
            result[i] = function(){
                return i;//只有当函数执行时 i才被赋值 注意声明和调用是两个概念。
                //是闭包访问的函数里的i,只是要注意声明和调用的问题。
            };
        }
        return result;
    }
    var funcs = createFunctions();
    for (var i=0; i < funcs.length; i++){
        console.log(funcs[i]());
    }


i的值在调用时被确定,由于
createFunctions
里面定义的函数形成了闭包函数,result建立了引用--函数外可以调用--i同样被保存。只不过i保存的只有10。执行时再付的值。
4



 
setInterval(function(){
        imgs[outIndex].style.zIndex = 2;
        imgs[inIndex].style.zIndex = 3;
        //imgs[inIndex].style.opacity = 0~1;
        change(inIndex, function(){
            imgs[outIndex].style.zIndex = 1;
            outIndex++;
            inIndex++;//闭包保存执行结果
            if(inIndex >= imgs.length){
                inIndex = 0;
            }
            if(outIndex >= imgs.length){
                outIndex = 0;
            }
        });
    }, 4000);


这是做渐变效果中封装的一个函数,
闭包用于保存下标的执行结果。



var name = "The Window";


    var object = {
        name : "My Object",


        getNameFunc : function(){
            return function(){
                return this.name;
            };

        }

    };

    alert(object.getNameFunc()());*/
   /* var name = "The Window";


    var object = {
        name : "My Object",


        getNameFunc : function(){
            var that = this;
            return function(){
                return that.name;
            };

        }

    };

//主要是考察·this指向 如果指向原生object。
原创粉丝点击