Javascript:如何调整我的debounce函数以采用IF条件?

Javascript:如何调整我的debounce函数以采用IF条件?,javascript,Javascript,我发现了一个bug,并找到了它。 你可以 结果是,我需要去掉if()语句,而不是解除函数本身的解块。 我希望将去盎司作为一个独立的函数,但我不确定如何传入条件 有什么建议吗 代码如下: 使用您的示例,为什么不将切换传递为arg 1。。。比如: var toggle = true; var debouncedFunk = function(toggle) { if (toggle) // the function call else // something else }

我发现了一个bug,并找到了它。
你可以

结果是,我需要去掉
if()
语句,而不是解除函数本身的解块。
我希望将去盎司作为一个独立的函数,但我不确定如何传入条件

有什么建议吗

代码如下:


使用您的示例,为什么不将切换传递为arg 1。。。比如:

var toggle = true;
var debouncedFunk = function(toggle) {
  if (toggle)
    // the function call
  else
    // something else
};
debounce(debouncedFunk, toggle, 1250);
您还应该研究如何使用函数对象
.call
.apply
方法。它们用于调用函数和传递参数。以函数为例:

var example = function(one, two) { 
  // Logic here
};
你可以用三种方式来称呼它:

// First
example(1, 2);
// Second
example.call({}, 1, 2);
// Third
example.apply({}, [ 1, 2 ]);
第一种是调用函数的标准方法。第一个参数与
.call
之间的区别在于
.call
的第一个参数是函数的上下文对象(此
将指向函数内部的内容),其他参数在此之后传递(并且,
.call
需要一个已知列表。
.apply
的好处是,您可以将数组传递给参数函数,并且它们将被适当地分配给参数列表,第一个参数仍然是上下文对象

它将简化你的去盎司函数,而不是像你现在这样处理结构化对象

对你的减重建议:

var debounce = function(funk, delay) {
  var args = [];
  if (arguments.length > 2)
    args = [].slice.call(arguments, 2);
  setTimeout(function() { funk.apply({}, args); }, delay);
};
将当前if更改为:

var toggle = true;
var debouncedFunk = function(toggle) {
  if (toggle)
    // Do if true
  else
    // DO if false
};
debounce(debouncedFunk, 1000, toggle);
可能信息太多(对不起)

最后,我建议使用一个框架(如果可能的话),其中已经实现了这些功能(以及许多其他有用的功能),例如。使用下划线,您的示例如下所示:

// Define debouncedFunk and toggle
debouncedFunk = _.bind(debouncedFunk, {}, toggle);
debouncedFunk = _.debounce(debouncedFunk, 1000);
debouncedFunk();
编辑


修复了下划线示例,
debounce
返回一个函数,该函数仅在延迟后执行,但仍需要调用。

那么这到底是做什么的呢?我知道电子产品中的谴责,但似乎不知道这在这里是如何应用的。您可以移动
if(切换){
检查
foo
函数内部……当然,如果您有多个函数,这将违反DRY。@据我所知,arttronics希望消除抖动(例如延迟)if检查。他不想立即测试
切换
,但稍后,在函数实际被调用的那一刻。@Šime Vidas:是的,我正试图让我的代码变干(不要重复)尽可能地,这就是为什么我希望将解盎司保持为某种独立的。@Sachlen现实生活中的实现是在设置UI的输入字段上。输入有上限和下限(根据环境动态生成)。如果我们需要强制执行这些限制,那自然要等到用户(或应该)被允许时才能执行完成输入它们的值。HTH.+1您唯一遗漏的是目录。回答很好!哇@izuriel,这是一堆很棒的信息。在我真正理解它之前可能需要一些消化:),但那太棒了。谢谢。@mOrloff没问题,我希望它能帮助您!谢谢arttronics!
// Define debouncedFunk and toggle
debouncedFunk = _.bind(debouncedFunk, {}, toggle);
debouncedFunk = _.debounce(debouncedFunk, 1000);
debouncedFunk();