我很好奇为什么用_.throttle包装函数在函数声明中不起作用。此函数表达式按预期运行:
var myFunc = _.throttle(function(){
console.log("I'm throttling");
}, 1000);
虽然这不是:
function myFunc(){
return _.throttle(function(){console.log("I'm throttling");}, 1000);
}
非常感谢任何见解。
答案 0 :(得分:4)
_.throttle
将返回当前函数的限制版本。在第一种情况下,您正在调用_.throttle
,并且您正在获取受限制的函数对象。所以,当你只是做
myFunc();
它调用你的实际功能。但在第二种情况下,您将从myFunc
函数返回限制函数。因此,在您调用myFunc
之前,根本不会调用_.throttle
。您必须调用外部函数来获取受限制的版本,然后调用该函数以获得您期望的结果。
myFunc()();
正如idbehold在评论中指出的那样,你应该将myFunc()
的结果存储在一个变量中,然后使用后续的调用,就像这样
var throttledVersion = myFunc();
throttledVersion();
throttledVersion();
...
但更喜欢第一个版本。