當一個函數須要頻繁的被調用時,會消耗大量的資源,使用節流的方式會減小資源的消耗數組
即在規定時間內只讓函數觸發的第一次生效,後面不生效。閉包
//fn爲須要執行的函數,dalay爲須要延遲的時間 function throttle(fn,delay){ //記錄上一次函數觸發的時間 var lastTime = 0; //使用閉包能防止讓lastTime的值在每次調用時都初始化爲0 return function(){ var nowTime = Data.now(); if(nowTime-lastTime > delay){ //修正this的指向問題 fn.call(this); //將時間同步 lastTime = nowTime; } } }
一個須要頻繁觸發的函數須要在規定時間內,只讓最後一次生效,前面的不生效app
function debounce(fn,delay){ //記錄上一次的延時器 var timer = null //第一次設置爲空 return function(){ //使用閉包防止每次調用時將timer初始化爲null; clearTimeout(timer) //清除上一次的延時器 //從新設置新的延時器 timer = setTimeout(function(){ //設置延時器 fn.apply(this); //修正fn函數的this指向 },delay) } }
call和apply都是Function對象的原型方法,它們是把特定的函數看成一個方法綁定到指定的對象上進行調用。函數
apply和call的方法和功能用法相同,區別是他們傳遞的參數的方式不一樣,其中apply()是用數組的方式進行傳遞參數,call方法則用數值的方式進行傳遞參數。this
並且call()方法只能接受多個參數列表,apply()方法只能接收數組或者僞類數組,數組元素將做爲參數傳遞給被調用的函數。
spa