我试图通过从头开始实现中间函数来掌握Javascript。目前正在尝试实现延迟函数,该函数执行在等待时间(等待)之后作为参数传递的任意函数。这还需要能够转发额外传递的参数作为被延迟函数的额外参数。
到目前为止我所做的并不是在setTimeout()中调用该函数。我不确定它是语法错误还是我完全错过了这一点。我在这里查看了类似的问题,并试图实现一些建议的结果,但似乎没有人考虑额外的论点方面。无论如何,这是我现在拥有的。
var exampleDelay = function (func, wait) {
return function () {
setTimeout(func.apply(this, arguments), wait);
}
};
任何帮助解决这个问题都会受到赞赏(或者如果有人能指出我可能错过的答案)。
答案 0 :(得分:0)
您从try:
tagged = nltk.pos_tag(tokens)
except LookupError:
nltk.download("averaged_perceptron_tagger")
返回的功能是您稍后调用的功能。
要在调用该函数时保留exampleDelay
,直到计时器执行它为止,您可以将预期函数包装在计时器内的匿名函数中。然后在里面你可以使用arguments
来传递先前存储的参数。与以下类似。
apply
答案 1 :(得分:0)
Fran打败了我,但只是为了变化。 如果你想一次性提供所有参数,这可能是一个选项
var exampleDelay = function(callback,wait,args) {
var args = [].slice.call(arguments) // get the parent arguments and convert to an array
args.splice(0,2); // remove the first two argument which are the fuction supplied and the wait time
// a fuction to call the supplied function
var callnow = function() {
var params = arguments; // get the child arguments
var context = this;
setTimeout(function(){
callback.apply(context, params) // call the function
}, wait);
}
callnow.apply( this, args ) // use apply to supply the arguments extracted from the parrent
};
exampleDelay(console.log, 1000,"hey")
exampleDelay(console.log, 5,"hey", "there")

callnow.apply( this, args ) // we then call the function with apply and supply args extracted from the parent
好吧,您可以稍后处理函数验证,以确保第一个参数是函数