Javascript 访问外部调用函数参数

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

我想写一个函数,它接受一个函数和一些其他对象作为参数,并将这些参数作为函数的默认参数,然后返回一个新函数

假设我们有drawRect(x,y,x2,y2),我想写一个名为'partial'的函数,这样

(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