如何将函数嵌入到这样的javascript函数中?

时间:2017-02-08 12:11:02

标签: javascript function

我刚刚遇到了一个非常有趣的任务要解决,但我自己也做不到。

创建一个执行以下输入的功能!

console.log(foo(4)(5)(6)); // output: 120

解决方案不是这样的:

function foo(number1,number2,number3){
  return number1 * number2 * number3;
}

理论上它必须使用嵌套函数。

6 个答案:

答案 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)

使用箭头功能;

&#13;
&#13;
var foo = a => b => c => a*b*c;

console.log(foo(4)(5)(6));
&#13;
&#13;
&#13;