在函数声明中使用Underscore的_.throttle

时间:2014-04-11 01:30:28

标签: javascript underscore.js

我很好奇为什么用_.throttle包装函数在函数声明中不起作用。此函数表达式按预期运行:

var myFunc = _.throttle(function(){
   console.log("I'm throttling");
}, 1000);

虽然这不是:

function myFunc(){
    return _.throttle(function(){console.log("I'm throttling");}, 1000);
}

非常感谢任何见解。

1 个答案:

答案 0 :(得分:4)

_.throttle将返回当前函数的限制版本。在第一种情况下,您正在调用_.throttle,并且您正在获取受限制的函数对象。所以,当你只是做

myFunc();

它调用你的实际功能。但在第二种情况下,您将从myFunc函数返回限制函数。因此,在您调用myFunc之前,根本不会调用_.throttle。您必须调用外部函数来获取受限制的版本,然后调用该函数以获得您期望的结果。

myFunc()();

正如idbehold在评论中指出的那样,你应该将myFunc()的结果存储在一个变量中,然后使用后续的调用,就像这样

var throttledVersion = myFunc();
throttledVersion();
throttledVersion();
...

但更喜欢第一个版本。