Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   что значат подобные записи вызова функций: foo()(); или foo(1)(3)(5); ? (https://javascript.ru/forum/misc/53912-chto-znachat-podobnye-zapisi-vyzova-funkcijj-foo-%3B-ili-foo-1-3-5-%3B.html)

ogurchik 23.02.2015 17:12

что значат подобные записи вызова функций: foo()(); или foo(1)(3)(5); ?
 
встретились вот, поиск и обращение к сокурсникам дало результат - это самовызывающиеся функции. но насколько я знаю самовызывающиеся функции это нечто иное? подскажите, как эта запись вообще называется что бы найти по ней информацию! спасибо

рони 23.02.2015 17:15

ogurchik,
http://forwebdev.ru/javascript/chaining/

ogurchik 23.02.2015 17:49

спасибо, про цепочки методов знаю, но по-моему это немного не то, нет? тут о чистом js речь идет, о вот таком необычном вызове функции.

Safort 23.02.2015 18:12

рони,
нет, это не цепочки методов, т.к. тут, собственно, этих методов и нет.

ogurchik,
этот шаблон, если не путаю, называется каррирование.

function foo(a) {
  return function(b) {
    return function(c) {
      return a + b + c;
    }
  }
}

var a = foo(1)(1)(1);
alert(a);

ogurchik 23.02.2015 18:28

Safort,
спасибо! очень помогли!

Safort 23.02.2015 18:30

На ES6 выглядит лучше
let a = (a) => {
  return b => {
    return c => {
      return a + b + c;
    }
  }
}

let q = a(1)(1)(1);

nerv_ 23.02.2015 19:13

Цитата:

Сообщение от Safort
лучше

хз насчет лучше... можно так еще
let foo = (a) => (b) => (c) => a + b + c;

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

а вообще http://learn.javascript.ru/task/summ...chestva-skobok

Safort 23.02.2015 19:31

nerv_,
блин, чот ступил, действительно можно гораздо лаконичней)

Erolast 24.02.2015 06:50

Цитата:

хз насчет лучше... можно так еще
let foo = (a) => (b) => (c) => a + b + c;
 
console.log(foo(1)(2)(3))
;
let foo = a => b => c => a + b + c;

:)


Часовой пояс GMT +3, время: 00:01.