• js闭包


    1.什么是闭包?

    函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制所收回

    function aaa(a){
        
        var b = 5;
    
        function bbb(){
            alert(a);
            alert(b);
        }
    
    }
    
    aaa();
    //JS中的垃圾回收机制
    
    function aaa(){
        
        var a = 1;
        
    }
    
    aaa();
    function aaa(){
        var a = 5;
        function bbb(){
            alert(a);
        }
        return bbb;
    }
    
    var c = aaa();
    
    c();


    2.闭包有什么好处?应用在那里?

    1.希望一个变量长期驻扎在内存当中
    2.避免全局变量的污染
    3.私有成员的存在

    1.模块化代码

    var aaa = (function(){
    
        var a = 1;
        
        function bbb(){
            a++;
            alert(a);
        }
        
        function ccc(){
            a++;
            alert(a);
        }
        
        return {
            
            b : bbb,
            c : ccc
            
        }
    
    })();
    
    
    //aaa.b();  //2
    //aaa.c();  //3
    
    //alert(a);
    //alert(bbb);
    alert(ccc);


    2.在循环中直接找到对应元素的索引

    window.onload = function(){
        var aLi = document.getElementsByTagName('li');
        
        /*for(var i=0;i<aLi.length;i++){
        
            (function(i){
            
                aLi[i].onclick = function(){
                    alert(i);
                };
            
            })(i);
            
            
        }*/
        
        for(var i=0;i<aLi.length;i++){
        
            
                aLi[i].onclick = (function(i){
                
                    return function(){
                        alert(i);    
                    }
                    
                })(i);
    
            
        }
        
    };


    3.闭包需要注意得地方?

    //IE下会引发内存泄漏
    
    /*window.onload = function(){
        var oDiv = document.getElementById('div1');
        
        oDiv.onclick = function(){
            alert(oDiv.id);
        };
        
        window.onunload = function(){
            oDiv.onclick = null;
        };
        
    };*/
    
    window.onload = function(){
        var oDiv = document.getElementById('div1');
        
        var id = oDiv.id;
        
        oDiv.onclick = function(){
            alert(id);
        };
        
        oDiv = null;
        
    };
  • 相关阅读:
    ios布局约束
    IOSanimationDidStop
    iosanimationWithKeyPath
    CALayer的分析
    关于集合的小demo
    关于集合越界后 不能使用迭代器遍历的处理方式
    html--day02
    关于LIst Set Map 异常的知识点---我的笔记
    css入门
    html相关标记的含义
  • 原文地址:https://www.cnblogs.com/leejersey/p/3550869.html
Copyright © 2020-2023  润新知