我已经定义了我自己的partial
函数版本:
const partial = function (fn,...partialArgs){
let args = partialArgs;
return function(...fullArguments) {
let arg = 0;
for (let i = 0; i < args.length && arg < fullArguments.length; i++) {
if (args[i] === undefined) {
args[i] = fullArguments[arg++];
}
}
return fn.apply(null, args);
};
};
当我使用它时:
let delay = partial(setTimeout,undefined,100)
delay(() => console.log("XXX"))
它按照我的预期打印XXX
。但是当我尝试重用函数delay
时,似乎它不起作用:
delay(() => console.log("YYY"))
即使是上面的代码段打印XXX
!!我不知道我在哪里弄错了。
答案 0 :(得分:3)
问题是你修改调用函数时保留的args
;后续调用会重用已修改的args,因为您只填写了undefined
。
如果这是故意的(填补漏洞),那么每次修改副本之前都需要复制partialArgs
,请参阅***
评论:
const partial = function(fn, ...partialArgs) {
// *** Not creating `args` here
return function(...fullArguments) {
let arg = 0;
let args = partialArgs.slice(); // *** Make a copy here before modifying
for (let i = 0; i < args.length && arg < fullArguments.length; i++) {
if (args[i] === undefined) {
args[i] = fullArguments[arg++];
}
}
return fn.apply(null, args);
};
};
let delay = partial(setTimeout, undefined, 100)
delay(() => console.log("XXX"))
delay(() => console.log("YYY"))