我刚刚遇到了一个非常有趣的任务要解决,但我自己也做不到。
创建一个执行以下输入的功能!
console.log(foo(4)(5)(6)); // output: 120
解决方案不是这样的:
function foo(number1,number2,number3){
return number1 * number2 * number3;
}
理论上它必须使用嵌套函数。
答案 0 :(得分:3)
它被称为 currying 。你需要返回函数,它返回一个返回总数的函数。在这里,我们还使用了一个名为closure的术语。
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()
答案 1 :(得分:2)
您可以使用方法对函数的任何长度的重复调用返回函数和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));

答案 2 :(得分:1)
尝试使用<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:src="@android:drawable/ic_dialog_email"
android:layout_marginTop="114dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
:
currying
https://jsfiddle.net/mv9bm3tL/1/
更多信息:https://www.sitepoint.com/currying-in-functional-javascript/
答案 3 :(得分:1)
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;
}
}
}
答案 4 :(得分:1)
javascript中的闭包将帮助您实现此目的。
function foo(a){
return function(b){
return function(c){
return a*b*c;
}
}
}
console.log(foo(4)(5)(6)); //will return 120
答案 5 :(得分:1)
使用箭头功能;
var foo = a => b => c => a*b*c;
console.log(foo(4)(5)(6));
&#13;