函数闭包

61 阅读1分钟

*****闭包:

目的:保护一个可以【反复使用的局部变量】的一种词法结构,结合了全局和局部的优点

唯一的缺点

受保护的变量永远不能释放,用多了会导致内存泄漏
尽量的少用:只有一个点会用到防抖节流	  

如何:3步

  1. 创建一个外层函数
  2. 在其中创建一个受保护的局部变量
  3. 外层函数调用要返回内层函数,此内层函数在操作受保护的变量

鄙视时

  1. 判断闭包,找到受保护的变量,确定其值
  2. 外层函数调用几次,就创建了几个闭包,受保护的变量就有了几个副本
  3. 同一次外层函数调用,返回的内层函数,都是在使用同一个受保护的变量
  • 固定语法

    function 外层函数(){
      受保护的变量;
      return function(){
      不断的操作受保护的变量
      return 结果;
      }
    }	
    
      
     var 内层函数=外层函数();
    

正式开发:防抖节流:减少DOM树的渲染,DOM数据渲染的次数越频繁页面的效率越底下

3个事件需要去做防抖节流:

1、elem.onmousemove - 鼠标移动事件,每次移动就会触发
2input.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();