Javascript 在函数声明中使用下划线的u.throttle
我很好奇为什么在函数声明中用u.throttle包装函数不起作用。此函数表达式的行为符合预期:Javascript 在函数声明中使用下划线的u.throttle,javascript,underscore.js,Javascript,Underscore.js,我很好奇为什么在函数声明中用u.throttle包装函数不起作用。此函数表达式的行为符合预期: var myFunc = _.throttle(function(){ console.log("I'm throttling"); }, 1000); 但这并不是: function myFunc(){ return _.throttle(function(){console.log("I'm throttling");}, 1000); } 任何洞察都将不胜感激。将返回当前函数的
var myFunc = _.throttle(function(){
console.log("I'm throttling");
}, 1000);
但这并不是:
function myFunc(){
return _.throttle(function(){console.log("I'm throttling");}, 1000);
}
任何洞察都将不胜感激。将返回当前函数的限制版本。在第一种情况下,您正在调用u.throttle,并获得throttled函数对象。所以,当你这么做的时候
myFunc();
它调用您的实际函数。但在第二种情况下,您将从myFunc函数返回节流函数。因此,在调用myFunc之前,\ throttle将根本不会被调用。您必须调用外部函数以获得限制版本,然后调用该函数以获得预期的结果
myFunc()();
正如idbehold在注释中指出的,您应该将myFunc的结果存储在一个变量中,然后在后续调用中使用它,如下所示
var throttledVersion = myFunc();
throttledVersion();
throttledVersion();
...
但首选第一个版本。将返回当前函数的限制版本。在第一种情况下,您正在调用u.throttle,并获得throttled函数对象。所以,当你这么做的时候
myFunc();
它调用您的实际函数。但在第二种情况下,您将从myFunc函数返回节流函数。因此,在调用myFunc之前,\ throttle将根本不会被调用。您必须调用外部函数以获得限制版本,然后调用该函数以获得预期的结果
myFunc()();
正如idbehold在注释中指出的,您应该将myFunc的结果存储在一个变量中,然后在后续调用中使用它,如下所示
var throttledVersion = myFunc();
throttledVersion();
throttledVersion();
...
但是我更喜欢第一个版本