// 闭包的使用场景:一个方法要被多次调用,并且共享一个数据 // 防抖和节流 // 自执行函数省去单独调用一次 let addEvent = (function() { let obj = {}; return function(eventName,fns){ if(obj[eventName] && obj[eventName].length>0){ obj[eventName].push(fns); }else { obj[eventName] = []; obj[eventName].push(fns); // 相当于每次添加一个新事件,则给这个事件绑定对应的事件,因为引用的obj是引用类型,之后每次obj修改,则会同步更新进来 document.addEventListener(eventName,function () { for(let fn of obj[eventName]){ fn(); } }) } } })() addEvent('mouseover',function () { console.log("鼠标进入") }) addEvent('click',function () { console.log("click1") }) addEvent('click',function () { console.log("click2") }) addEvent('click',function () { console.log("click3") }) addEvent('click',function () { console.log("click4") })