|
Объясните, почему функция работает именно так.
Всем привет.
Есть вопрос: function addThree(x) { return x + 3; } function composed(func) { return function(x) { return func(func(x)) } } var answer = composed(addThree)(4); И не могу понять, что за странная передача аргумента в функцию - composed(addThree)(4) ?? Почему не вот так composed(addThree(4)) - я уже понял, что так нельзя, попробовал. Просто еще не сталкивался с подобным способом написания. Что в таком случае происходит? Ведь функция composed принимает только один параметр - func? Тогда что за странная запись (addThree)(4) ? Новичок. Не судите строго :) Спасибо. |
первая функция передаётся как аргумент, и возвращается новая функция, которая вызовет первую, передав ей первый аргумент.
т.е. при первой скобке возвратится функция, которая будет вызывать переданную и передавать ей первый аргумент, а вторая скобка вызывает её. почему запоминается первая функция? это называется замыкание. |
спасибо
|
Вопрос не по этой теме, но по примеру из данного раздела раздела "Декораторы" сайта learn.javascript.ru:
01 function doublingDecorator(f) { 02 return function() { 03 return 2*f.apply(this, arguments); // (*) 04 }; 05 } 06 07 // Использование: 08 09 function sum(a, b) { 10 return a + b; 11 } 12 13 sum = doublingDecorator(sum); 14 15 alert( sum(1,2) ); // 6 16 alert( sum(2,3) ); // 10 в строке 13 мы записываем в переменную sum результат, и теперь данная переменная не должна указывать на функцию function sum(a, b) {...} Кто может указать (где на сайте или в книге Флэнагана) этот момент можно понять, можно и самостоятельно объяснить. |
Цитата:
Она сохраняется благодаря замыканию. Статья, по которой Я понял замыкания ( я перечитал их около 10 штук), находится на хабре. |
melky, хорошо начинать с js - такие вещи как замыкания и прототипы кажутся очевидными и элементарными с самого начала.)
С другой стороны если берёшся за другой язык - уже "нормальное" ООП кажется тёмным лесом и вообще непонятно нафига козе баян.)) |
Цитата:
|
Может и так, но я еще не до конца въехал.
Замыкание - Объект с переменными внешней функции можно использовать из внутренней функции. (Илья Кантор) Однако все эти замыкания представляют интерес лишь в только что рассмотренной ситуации, когда вложенная функция экспортируется за пределы области видимости, в которой она была определена. Вложенные функции, используемые таким образом, нередко явно называют замыканиями. (Дэвид Флэнаган) Если, здесь это все используется, то может кто-нибудь терминами глобальных объектов, областей видимости и этапами инициализации это все объяснить. И еще, это нормальный вариант вот так делать или это пример "индусского кода" (надеюсь поданного специально чтоб лучше запомнилось, когда закипит мозг) ? ( сразу уточню, что не хотел сказать, что Илья Кантор выдает "индусский код", просто для новичков опытные говорят на "индусском") :). |
Нормально. Но дело вкуса. Я, например, люблю замыкания и "замыкаю" всё подряд, а кто-то не любит.))
|
Я люблю и обожаю, но еще не все примеры разобрал.
Может, объясниш этот случай. |
Часовой пояс GMT +3, время: 04:05. |
|