2013-12-20 22 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

谢谢,不知道! –