2013-12-20 69 views
2
var debounce = function(fn,delay){ 
    var timeoutId; 
    return function debounced(){ 
     if(timeoutId){ 
      clearTimeout(timeoutId); 
     } 
     timeoutId = setTimeout(fn.bind(this),delay,arguments); 
    } 
} 

上面的函數是一種簡單的去抖動方法嗎?我想知道它的正確實施與否。是否有缺陷?這是一個簡單的JavaScript反跳功能嗎?

+5

一個明顯的問題:它的工作? – 2013-12-20 02:33:40

+0

它對我來說是正確的。 – Thayne

+1

是的,它的工作原理.. –

回答

3

是否有瑕疵?

是的。 setTimeout函數不會將arguments數組作爲第三個參數。它可能需要兩個以上的參數,但由於它們不與舊版引擎向後兼容,因此被鄙視。閱讀setTimeout at MDN。所以最好去

var that = this, 
    args = arguments; 
timeoutId = setTimeout(function() { 
    fn.apply(that, args); 
}, delay); 
+0

@zerkms:那幾行代替'timeoutId = setTimeout(fn.bind(this),delay,arguments);'當然的任務......我只是不想重複整個函數。 – Bergi

+0

有道理,抱歉,+1 – zerkms

+0

謝謝,不知道! –