访问外部调用函数参数

时间:2013-11-21 20:03:29

标签: 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){
  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); 

但它在文档上写了一个'Nan'。我需要在调用时访问函数'ff'参数,但我不知道该怎么做。 你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

那里似乎有很多不必要的测试代码,我已经清理过了。据我了解,下面的代码和this demo可以满足您的需求。

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

答案 1 :(得分:2)

您可以使用.bind()

执行此操作
function partial(f, x, y) {
  return f.bind(this, x, y);
}