捕获调用的函数及其参数作为参数传递

时间:2018-12-07 10:25:19

标签: javascript functional-programming

我是JavaScript新手,对函数式编程有几个疑问。

以下是声明:

outer(inner(5));
  1. 是否可以以允许的方式构造函数outer 捕获函数inner及其参数5
  2. 是否可以通过允许构造函数inner的方式 将自身及其参数5传递给函数outer
  3. 如果以上两个问题的答案均​​为否,是否有可能 构造函数outerinner的方式允许前者 捕获函数inner及其参数5或 后者将自身及其参数5传递给函数 outer

我尝试过:

使用arguments对象,但无济于事。

function outer (parameter) {
    return arguments;
}

function inner (n) {
    return n + 1;
}

console.log(outer(inner(5))); // returns Arguments { 0: 6 ... }

使用 currying ,但是由于没有得到以下说明,我看不出它对我有什么帮助:

outer()(5);

3 个答案:

答案 0 :(得分:2)

一种可能的解决方法是从inner()返回一个数组,该数组一方面由处理函数组成,另一方面由参数组成。
outer将能够通过读取数组来访问两者。

function outer(arr)
{
    var fun    = arr[ 0 ];
    var arg    = arr[ 1 ];
    var result = fun(arg);
    console.log('inner function is:', fun);
    console.log('its argument is:', arg);
    console.log('its result is:', result);
    return result;
}

function inner(num)
{
    return [
        function (_num)
        {
            return _num + 1;
        },
        num
    ]
}

console.log(outer(inner(5)));

答案 1 :(得分:1)

一种可能涉及更改您的return值。您可以return inner中的数组,其中包含通过参数传递的原始参数(...arguments和返回值(to_return),然后使用destructuring assignment获取传入的参数(nm)和返回的result

function outer([result, n, m]) {
    console.log("returned from inner: ", result);
    console.log("arguments passed into inner: " + [n, m]);
    return n;
}

function inner(n, m) {
    let to_return = n + 1;
    return [to_return, ...arguments];
}

console.log(outer(inner(5, 2))); // returns 5

  • 注意:我添加了一个m参数来演示如何将其扩展到多个参数

答案 2 :(得分:0)

function outer(myFunction, argument) {
    if (typeof myFunction !== "function") {
        return false;
    }
    return myFunction(argument);
}

function inner(n) {
    return n + 1;
}

console.log(outer(inner, 5));

只是一种简单的方法。不要执行function inner,而应将其作为参数(myFunction)传递。然后让outer function用给定的参数执行它。