我有一个简单的函数,它接受一个参数
fn = function(argument) {console.log(argument)}
在setInterval
中,我想调用该函数并传递一个外部变量:
argument = 1
setInterval(<MY FUNCTION WITH ACCESS TO ARGUMENT>, 1000)
我意识到我可以用更高阶的函数来做,即
fn = function(argument) {
function () {
console.log(argument)
}
}
argument = 1
setInterval(fn(argument), 1000)
这确实有效,但我想知道是否可以使用curry
完成。
我试过了:
fn = _.curry(fn)("foo")
// since the function takes only one argument,
// here it is invoked and no longer can be
// passed as a function to setInterval
fn = _.curry(fn, 2)("foo")
// setting the arity to 2 makes it so the function
// isn't invoked. But setInterval does not pass
// the additional argument and so it never ends
// up getting invoked.
我觉得这些咖喱的例子中我有些遗漏。我或者咖喱会不会在这里帮忙吗?
答案 0 :(得分:1)
确实lodash _.curry
似乎不适合您的用例。
但您可以使用vanilla JavaScript bind
:
bind()
方法创建一个新函数,在调用时,将其this
关键字设置为提供的值,并在调用新函数时提供任何前面提供的给定参数序列。 / p>语法
fun.bind(thisArg[, arg1[, arg2[, ...]]])
在您的情况下,您的代码将如下所示:
fn = function(argument) {console.log(argument)}
var argument = 1
setInterval(fn.bind(this, argument), 1000)
如果你真的想用lodash的方式来做,fn.bind(thisArg, ...args)
的等价物是_.bind(fn, thisArg, ...args)
。如果您对设置this
引用不感兴趣,那么可以使用_.partial(fn, ...args)
保存一个参数:
创建一个函数,调用 func ,并在其收到的参数前加上 partials 。此方法类似于
_.bind
,但它不会改变this
绑定。