闭包

1.定义:有权访问另一个函数作用域中的变量的函数。

2.原理:不管在任何位置,只要函数执行了,必然可以拿到定义作用域中的变量。

3.特点:

①占内存;
②低版本浏览器中内存泄漏;
③可以在全局修改局部的数据。
4.作用:
①可以在函数的外部访问到函数内部的局部变量;
②让这些变量始终保存在内存中,不会随着函数的结束而自动销毁。
5.写法:通过作用域的嵌套实现,让局部变量,进化成私有变量的环境
6.应用场景:
①事件委托的封装:
var aBox = document.querySelectorAll("#box");
     document.onclick = eveEnt(aBox,function(){})
     function eveEnt(child,cb){
         return function(eve){
             var e = eve || window.event;
            var tar = e.target || e.srcElement;
             console.log(tar);
             for(var i = 0;i<child.length;i++){
                 if(child[i] === tar){
                     cb.bind(tar)();
                 }
             }

         }
     }

②循环中绑定事件,在事件内使用循环每次的计数器:

 for (let i = 0; i < ali.length; i++) {
        
        ali[i].onclick = function () {           
                console.log(i);
            }
   
}

③可以给计时器的回调函数传参:

setTimeout(fn("123"),1000)
function fn(a){
    return function(){
        console.log(a);
    }
}

④模块化开发:将功能作为模块操作,每个模块都是独立的,通过专用入口,进行功能的调用

var obj = (function(){
    "user strict";
    var url1 = "...1";
    var url2 = "...2";
    var url3 = "...3";
    function ajax(){
        console.log(url1);
    }
    function jsonp(){
        console.log(url2);
    }
    function cookie(){
        console.log(url3);
    }
    return {
        ajax:ajax,
        jsonp:jsonp,
        cookie:cookie
    }
})();
obj.ajax();
obj.jsonp();
obj.cookie();
原文地址:https://www.cnblogs.com/yh-3175339026/p/13027693.html