*****闭包:
目的:保护一个可以【反复使用的局部变量】的一种词法结构,结合了全局和局部的优点
唯一的缺点:
受保护的变量永远不能释放,用多了会导致内存泄漏
尽量的少用:只有一个点会用到防抖节流
如何:3步
- 创建一个外层函数
- 在其中创建一个受保护的局部变量
- 外层函数调用要返回内层函数,此内层函数在操作受保护的变量
鄙视时:
- 判断闭包,找到受保护的变量,确定其值
- 外层函数调用几次,就创建了几个闭包,受保护的变量就有了几个副本
- 同一次外层函数调用,返回的内层函数,都是在使用同一个受保护的变量
-
固定语法:
function 外层函数(){ 受保护的变量; return function(){ 不断的操作受保护的变量 return 结果; } } var 内层函数=外层函数();
正式开发:防抖节流:减少DOM树的渲染,DOM数据渲染的次数越频繁页面的效率越底下
3个事件需要去做防抖节流:
1、elem.onmousemove - 鼠标移动事件,每次移动就会触发
2、input.oninput - input每次修改内容就会触发
3、window.onresize - 屏幕每次改变大小就会触发
固定公式:
function fdjl(){
var timer=null;//3
return function(){
//判断有没有定时器,如果有定时器就清除定时器
if(timer){clearTimeout(timer)}
timer=setTimeout(function(){
//你要做的操作
},毫秒数)
console.log(timer);//定时器的序号
}
}
var animate=fdjl();