節流與防抖,函數的自帶方法call與apply

節流

當一個函數須要頻繁的被調用時,會消耗大量的資源,使用節流的方式會減小資源的消耗數組

即在規定時間內只讓函數觸發的第一次生效,後面不生效。閉包

 //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()方法

call和apply都是Function對象的原型方法,它們是把特定的函數看成一個方法綁定到指定的對象上進行調用。函數

apply和call的方法和功能用法相同,區別是他們傳遞的參數的方式不一樣,其中apply()是用數組的方式進行傳遞參數,call方法則用數值的方式進行傳遞參數。this

並且call()方法只能接受多個參數列表,apply()方法只能接收數組或者僞類數組,數組元素將做爲參數傳遞給被調用的函數。

spa

相關文章
相關標籤/搜索