js防止重複觸發事件

調用函數

以前作項目的過程當中,爲了防止用戶重複點擊事件,每每在每個函數裏寫一個flag來作判斷,可是這樣的方式會致使代碼冗餘,因此藉助 函數裏arguments.callee ,寫了一個函數,以下:函數

// 防重複觸發
stopReapeatEvent=function (obj) {
    if (obj.callFlag) return true;
    obj.callFlag=!obj.callFlag;
    clearTimeout(obj.iTime);
    obj.iTime=setTimeout(function(){
        obj.callFlag=!obj.callFlag;
    }, 1000);
}

調用的時候也很簡單,code

//調用
if(stopReapeatEvent(arguments.callee))  return ;

原理:補充 caller 和 callee 知識點

caller:

返回一個對函數的引用,該函數調用了當前函數。對象

functionName.caller遞歸

functionName 對象是所執行函數的名稱。事件

說明:對於函數來講,caller 屬性只有在函數執行時纔有定義。 若是函數是由 Javascript 程序的頂層調用的,那麼 caller 包含的就是 null 。ip

callee:

返回正被執行的 Function 對象,也就是所指定的 Function 對象的正文。io

[function.]arguments.callee
可選項 function 參數是當前正在執行的 Function 對象的名稱。function

說明匿名函數

callee 屬性的初始值就是正被執行的 Function 對象。原理

callee 屬性是 arguments 對象的一個成員,它表示對函數對象自己的引用,這有利於匿名函數的遞歸或者保證函數的封裝性。而該屬性僅當相關函數正在執行時纔可用。還有須要注意的是callee擁有length屬性,這個屬性有時候用於驗證仍是比較好的。arguments.length是實參長度,arguments.callee.length是形參長度,由此能夠判斷調用時形參長度是否和實參長度一致。

求指正,謝謝!

相關文章
相關標籤/搜索