[英]How to embed functions into functions in javascript like this?
我刚刚遇到了一个非常有趣的任务要解决,但是我自己做不到。
进行以下输入的功能!
console.log(foo(4)(5)(6)); // output: 120
解决方案不是这样的:
function foo(number1,number2,number3){
return number1 * number2 * number3;
}
理论上,它必须使用嵌套函数。
这被称为咖喱 。 您需要返回函数,这种情况是返回一个返回总数的函数。 在这里,我们还使用了称为闭包的术语。
function foo(a){ return function(b) { return function(c){ return a * b * c; } } } console.log(foo(4)(5)(6));
使用ES6语法
var foo = a => b => c => a*b*c; console.log(foo(4)(5)(6));
对于无限的水平,你可以做
function foo(value){ infinite.total = value; function infinite(val) { infinite.total *= val; return infinite; } infinite.toString = function() { return infinite.total; } return infinite; } console.log(foo(4)(5)(6)(7)); var total = foo(4)(5)(6)(7); console.log(total);
但是在这种情况下,当显式或隐式调用toString()
时,这将输出总计
您可以对返回的函数和toString
方法的实现使用任意长度的函数重复调用方法。
var foo = function(value) { function fn(a) { fn.value *= a; return fn; } fn.value = value; fn.toString = function () { return fn.value; }; return fn; } console.log(foo(4)(5)(6)); console.log(foo(42)); console.log(foo(42)(44));
尝试currying
:
function foo(number) {
return function(number2) {
return function(number3) {
return number * number2 number3;
}
}
}
console.log(foo(5)(6)(7));
https://jsfiddle.net/mv9bm3tL/1/
详细信息: https : //www.sitepoint.com/currying-in-functional-javascript/
You need nested functions - currying;
console.log(foo(4)(5)(6)); // output: 120
let first = foo(4);
let second = first(5);
let last = second(6);
console.log(last);
function foo(number1,number2,number3){
return function(number2){
return function(number3){
return number1 * number2 * number3;
}
}
}
javascript中的闭包将帮助您实现这一目标。
function foo(a){
return function(b){
return function(c){
return a*b*c;
}
}
}
console.log(foo(4)(5)(6)); //will return 120
使用箭头功能;
var foo = a => b => c => a*b*c; console.log(foo(4)(5)(6));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.