我是JavaScript新手,对函数式编程有几个疑问。
以下是声明:
outer(inner(5));
outer
捕获函数inner
及其参数5
?inner
的方式
将自身及其参数5
传递给函数outer
?outer
和inner
的方式允许前者
捕获函数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);
答案 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获取传入的参数(n
和m
)和返回的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
用给定的参数执行它。