Javascript 部分应用功能仅第一次起作用。
我已经定义了自己版本的Javascript 部分应用功能仅第一次起作用。,javascript,Javascript,我已经定义了自己版本的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 (arg
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);
};
};
它确实像我所期望的那样打印出XXX。但是当我尝试重用函数delay
,它似乎不起作用:
delay(() => console.log("YYY"))
甚至上面的代码片段也会打印
XXX
!!我不确定我在哪里犯了错误 问题在于,您修改了调用函数时保留的args
;后续调用将重用修改后的参数,因为您只填写那些未定义的
如果这是有意的(填补漏洞),那么每次修改副本之前,您都需要制作一份partialArgs
,请参见***
注释:
const partial=函数(fn,…partialArgs){
//***此处不创建“args”
返回函数(…fullArguments){
设arg=0;
让args=partialArgs.slice();//***在修改之前在此处复制一份
for(设i=0;iconsole.log(“XXX”))
延迟(()=>console.log(“YYY”)
您是否打算让部分
用完整参数
中的参数替换部分参数
中未定义的参数?这是一种非常不寻常的局部应用形式,但我可以看到用例。…@T.J.Crowder:是的,这正是我想要做的!LGTM,if语句可以简化args[i]=args[i]| | fullArguments[arg++]代码>我的坏!我尝试在返回函数中移动args
。但完全忘记了它使用的是原始参考!
delay(() => console.log("YYY"))