節流與防抖,函數的自帶方法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;
            }
        }
    }

防抖

一個需要頻繁觸發的函數需要在規定時間內,只讓最后一次生效,前面的不生效

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方法則用數值的方式進行傳遞參數。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM