Как сделать var a = add (2) (3); // 5 работа? - PullRequest
37 голосов
/ 16 февраля 2010

Я хочу сделать этот синтаксис возможным:

var a = add(2)(3); //5

на основании того, что я прочитал в http://dmitry.baranovskiy.com/post/31797647

Понятия не имею, как это сделать.

Ответы [ 20 ]

2 голосов
/ 10 января 2016

Это обобщенное решение, которое решит add (2,3) (), add (2) (3) () или любую комбинацию, например add (2,1,3) (1) (1) (2 3) (4) (4,1,1) (). Обратите внимание, что некоторые проверки безопасности не выполняются и могут быть оптимизированы в дальнейшем.

function add() {
	var total = 0;

	function sum(){
		if( arguments.length ){
			var arr = Array.prototype.slice.call(arguments).sort();
			total = total + arrayAdder(arr);
			return sum;
		}
		else{
			return total;
		}
	}

	if(arguments.length) {
		var arr1 = Array.prototype.slice.call(arguments).sort();
		var mytotal = arrayAdder(arr1);
		return sum(mytotal);
	}else{
		return sum();
	}

	function arrayAdder(arr){
		var x = 0;
		for (var i = 0; i < arr.length; i++) {
			x = x + arr[i];
		};
		return x;
	}
}
add(2,3)(1)(1)(1,2,3)();
2 голосов
/ 28 мая 2016

В этом случае можно использовать концепцию CLOSURES.
Функция «добавить» возвращает другую функцию. Возвращаемая функция может обращаться к переменной в родительской области (в данном случае это переменная a).

function add(a){

    return function(b){
        console.log(a + b);
    }

}


add(2)(3);

Вот ссылка для понимания замыканий http://www.w3schools.com/js/js_function_closures.asp

1 голос
/ 28 февраля 2019

Функции стрелок, несомненно, значительно упрощают получение требуемого результата:

const Sum = a => b => b ? Sum( a + b ) : a;

console.log(Sum(3)(4)(2)(5)()); //19

console.log(Sum(3)(4)(1)()); //8
1 голос
/ 28 августа 2016
function add(a, b){
 return a && b ? a+b : function(c){return a+c;}
}

console.log(add(2, 3));
console.log(add(2)(3));
0 голосов
/ 18 декабря 2018

Просто мы можем написать такую ​​функцию

    function sum(x){
      return function(y){
        return function(z){
          return x+y+z;
        }
      }
    }

    sum(2)(3)(4)//Output->9
0 голосов
/ 29 января 2018
const add = a => b => b ? add(a+b) : a;

console.log(add(1)(2)(3)());

или (&#96;${a} ${b}&#96;) для строк.

0 голосов
/ 11 октября 2017
function A(a){
  return function B(b){
      return a+b;
  }
}

Я нашел хорошее объяснение этому типу метода. Он известен как Синтаксис замыканий

пожалуйста, обратитесь по этой ссылке Синтаксис замыканий

0 голосов
/ 17 сентября 2017

функция add () { var sum = 0;

    function add() {
        for (var i=0; i<arguments.length; i++) {
            sum += Number(arguments[i]);
        }
        return add;
    }
    add.valueOf = function valueOf(){
        return parseInt(sum);
    };
    return add.apply(null,arguments);
}

// ...

console.log(add() + 0);               // 0
console.log(add(1) + 0);/*                 // 1
console.log(add(1,2) + 0);               // 3
0 голосов
/ 03 апреля 2019
let total = 0;
const add = (n) => {
if (n) {
    total += n;
    return add;
 }
}

add(1)(2)(3);
console.log(total);

Это неправильно?

0 голосов
/ 28 апреля 2017

function add () {
    var args = Array.prototype.slice.call(arguments);
 
    var fn = function () {
        var arg_fn = Array.prototype.slice.call(arguments);
        return add.apply(null, args.concat(arg_fn));
    }
 
    fn.valueOf = function () {
        return args.reduce(function(a, b) {
            return a + b;
        })
    }
 
    return fn;
}

console.log(add(1));
console.log(add(1)(2));
console.log(add(1)(2)(5));

от http://www.cnblogs.com/coco1s/p/6509141.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...