Javascript 访问外部调用函数参数
我想写一个函数,它接受一个函数和一些其他对象作为参数,并将这些参数作为函数的默认参数,然后返回一个新函数 假设我们有drawRect(x,y,x2,y2),我想写一个名为'partial'的函数,这样Javascript 访问外部调用函数参数,javascript,function,arguments,Javascript,Function,Arguments,我想写一个函数,它接受一个函数和一些其他对象作为参数,并将这些参数作为函数的默认参数,然后返回一个新函数 假设我们有drawRect(x,y,x2,y2),我想写一个名为'partial'的函数,这样 (partial(drawRect, 0, 0))(x2, y2); 等于 drawRect(0, 0, x2, y2); 请注意,我希望函数部分是灵活的,因此它可以接受任何函数和任意数量的参数 到目前为止,我写了以下内容: function temp(a, b, c, d){ docum
(partial(drawRect, 0, 0))(x2, y2);
等于
drawRect(0, 0, x2, y2);
请注意,我希望函数部分是灵活的,因此它可以接受任何函数和任意数量的参数
到目前为止,我写了以下内容:
function temp(a, b, c, d){
document.write(a + b + c + d);
}
function partial(func){
var arr = new Array();
for (var i = 0; i<arguments.length; i++){
arr.push(arguments[i+1]);
}
var tf = function(){f.apply(this, arr.concat(func.arguments))}
console.log(2);
return tf;
}
var ff = partial(temp, 44, 55);
ff(20, 30);
功能温度(a、b、c、d){
文件编写(a+b+c+d);
}
函数部分(func){
var arr=新数组();
对于(var i=0;i来说,这里似乎有很多不必要的测试代码,我已经清理了这些代码。据我所知,下面的代码可以满足您的需要
function temp(a, b, c, d){
console.log(a + b + c + d);
}
function partial(f){
var defaultArgs = Array.prototype.slice.call(arguments, 1);
var that = this;
var tf = function(){
f.apply(that, defaultArgs.concat(Array.prototype.slice.call(arguments)));
}
return tf;
}
var ff = partial(temp, 44, 55);
ff(20, 30);
// console output: 149
这里似乎有很多不必要的测试代码,我已经清理了这些代码。据我所知,下面的代码可以满足您的要求
function temp(a, b, c, d){
console.log(a + b + c + d);
}
function partial(f){
var defaultArgs = Array.prototype.slice.call(arguments, 1);
var that = this;
var tf = function(){
f.apply(that, defaultArgs.concat(Array.prototype.slice.call(arguments)));
}
return tf;
}
var ff = partial(temp, 44, 55);
ff(20, 30);
// console output: 149
您可以使用.bind()
您可以使用.bind()
这就是所谓的。这就像咖喱,但严格来说是不同的,因为JavaScript不是一种懒惰的评估语言。(我不是100%确定谁负责这个术语;我理解这个区别,但我不知道谁关心这个术语是如何使用的:)这就是所谓的。这就像咖喱,但严格来说是不同的,因为JavaScript不是一种懒惰的评估语言。(我不是100%确定谁负责这个术语;我理解这个区别,但我不知道谁关心这个术语是如何使用的:)+1,我不知道。绑定函数只是一个具有不同逻辑的正则函数,还是它们在某种程度上是不同的?它们是“正则函数”,但它们是以特定的方式构造的。这与其他答案没有太大区别在大多数情况下,+1不知道这一点。绑定函数只是一个具有不同逻辑的正则函数,还是它们在某种程度上是不同的?它们是“正则函数”,但它们是以特定的方式构造的。这与其他答案没有太大的不同在大多数情况下,这里是。@alireza我同时将参数
对象转换为数组,并从中排除第一个元素。就您的原始代码而言,这相当于调用arr.slice(1)
,它将从第二个元素开始检索整个arr
。@alireza我正在同时将参数
对象转换为一个数组,并从中排除第一个元素。就原始代码而言,这相当于调用arr.slice(1)
,它将从第二个元素开始检索整个arr
。