在函数声明中使用下划线的 _.throttle



我很好奇为什么用_.strottle包装函数在函数声明中不起作用。此函数表达式的行为与预期一致:

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

尽管这不是:

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

任何见解都将不胜感激。

_.throttle将返回当前函数的节流版本。在第一种情况下,您正在调用_.throttle,并且您正在获得节流的函数对象。所以,当你简单地做时

myFunc();

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

myFunc()();

正如idseew在评论中指出的那样,您应该将myFunc()的结果存储在一个变量中,然后在随后的调用中使用它,比如这个

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

但更喜欢第一个版本。

最新更新