javascript:默认情况下,始终将函数中的第n个参数作为固定值传递

javascript:默认情况下,始终将函数中的第n个参数作为固定值传递,javascript,lodash,Javascript,Lodash,该函数接受3个参数,如 function p(x,y,z){ console.log(arguments); } 所以当我们把它叫做 p(12,21,32) 第四个论点应该通过,比如说56 因此实际上,调用应该是p(12,21,32,56) 如何做到这一点 条件我们无法更改函数定义。我需要将第四个论点部分绑定为 p=p.bind(这个,,,,,,56); 或者使用lodash 然后再打电话给p p(12,21,32) 默认情况下56应该通过 p = (function() { var

该函数接受3个参数,如

function p(x,y,z){
 console.log(arguments);
}
所以当我们把它叫做 p(12,21,32)

第四个论点应该通过,比如说56

因此实际上,调用应该是p(12,21,32,56)

如何做到这一点

条件我们无法更改函数定义。我需要将第四个论点部分绑定为

p=p.bind(这个,,,,,,56); 或者使用lodash

然后再打电话给p

p(12,21,32)

默认情况下56应该通过

p = (function() {
    var old_p = p;
    return function(a, b, c) {
        return old_p(a, b, c, 56);
    };
})();
我们记得
p
的旧版本,名称为
old\u p
,因此即使在重新定义
p
之后,我们也可以调用它。我们在生活中这样做是为了
old\u p
不会污染全球范围。然后,我们返回一个函数(分配给
p
),该函数返回调用带有额外参数的
old\u p
的结果

我们可以让它更通用,创建“绑定”函数,为任何函数调用添加额外的参数。下面我使用ES6语法,尤其是spread
运算符。但是,您可以通过操作
参数
对象并使用
应用
来完成相同的任务:

function bind_with_arguments_at_end(f, ...extra_args) {
    return function(...args) {
        return f(...args, ...extra_args);
    }
}
如果所涉及的函数是对象上的一个方法,则“传递”该函数是有意义的,因此可以将新函数称为
this.bound\u func
,这样事情就会继续工作。要执行此操作,我们可以使用
调用

function bind_with_arguments_at_end(f, ...extra_args) {
    return function(...args) {
        return f.call(this, ...args, ...extra_args);
               ^^^^^^^^^^^
    }
}

创建原始文件的副本并重写名称,然后使用新参数调用原始文件

功能p(a、b、c、d){
log(参数);
}
(功能(){
var org_p=p;//复制原件
p=函数(){//重写p
var args=[].slice.call(参数);//将参数转入数组
args.push(56);//添加第四个参数
返回org_p.apply(this,args);//使用更新的参数调用原始参数。
}
}());
p(1,2,3)您可以使用创建一个新函数,将参数附加到原始函数的末尾:

功能p(a、b、c)
{
警报([].join.call(参数“,”);
}
p=uu0.5(p,56);
p(1,2,3);//1,2,3,56

您可以创建一个新函数,该函数用于将其参数重定向到原始参数,但用于覆盖其中一些参数:

函数fixArguments(f,args){
返回函数(){
返回f.apply(this,Object.assign([].slice.call(arguments),args));
};
}
p=fixArguments(p,{3:56});//用56覆盖第4个参数
函数fixArguments(f,args){
返回函数(){
返回f.apply(this,Object.assign([].slice.call(arguments),args));
};
}
函数p(x,y,z){
log(参数);
}
p=固定参数(p,{3:56});

p(12,21,32)
您总是可以用4个参数定义函数,调用方法时是否传递第四个参数取决于您。@epascarello这就是我要找的:)但是当我需要添加56作为第七个参数(比如)时,普通javascript闭包更好。我们能用任何现成的lodash函数做到这一点吗?很好的解决方案和使用lodash是可以的,但是这里错过了一些关于高阶函数等的教学机会;p=p(,,,,,,,,56);p(1,2,3);这将适用于以下情况:)thanks@Jack太好了,谢谢:)就像把args附加到某个东西上的奇怪方式一样。