如何在JavaScript函数调用中预先设置参数? (部分功能应用)

我试图写一个JavaScript函数,它将返回其第一个参数(函数),其所有的其余参数作为该函数的预设参数。

所以:

function out(a, b) {
    document.write(a + " " + b);
}

function setter(...) {...}

setter(out, "hello")("world");
setter(out, "hello", "world")();

会输出“hello world”两次。为某些实现setter

我遇到了一个问题,操纵参数数组在我第一次尝试,但它似乎会有一个更好的方法来做到这一点。

首先,你需要一个部分 – there is a difference between a partial and a curry – 这里是所有你需要,没有框架:

function partial(func /*, 0..n args */) {
  var args = Array.prototype.slice.call(arguments, 1);
  return function() {
    var allArguments = args.concat(Array.prototype.slice.call(arguments));
    return func.apply(this, allArguments);
  };
}

现在,使用你的例子,你可以做到你所做的:

partial(out, "hello")("world");
partial(out, "hello", "world")();

// and here is my own extended example
var sayHelloTo = partial(out, "Hello");
sayHelloTo("World");
sayHelloTo("Alex");

partial()函数可以用来实现,但不是curry。这是从a blog post on the difference的报价:

Where partial application takes a function and from it builds a function which takes fewer arguments, currying builds functions which take multiple arguments by composition of functions which each take a single argument.

希望有帮助。

翻译自:https://stackoverflow.com/questions/321113/how-can-i-pre-set-arguments-in-javascript-function-call-partial-function-appli

转载注明原文:如何在JavaScript函数调用中预先设置参数? (部分功能应用)