Было бы очень полезно, если кто-то объяснит работу карри. Я прочитал много примеров, но не смог понять его должным образом. Это так или иначе связано с закрытием.Функция curry в javascript использует принцип закрытия?
ответ
Currying - это просто метод, который может использовать любую функцию языка (например, замыкания) для достижения желаемого результата, но не определено, какую функцию языка нужно использовать. В связи с этим каррирование не требует использования затворов (но в большинстве случаев будут использоваться затворы)
Вот небольшой пример использования каррирования с использованием и без использования закрывания.
С закрытием использования:
function addition(x,y) {
if (typeof y === "undefined") {
return function (y) {
return x + y;
}
}
return x + y;
}
var additionRemaining = addition(3); // Currying
additionRemaining(5);//add 5 to 3
С использованием new Function
вместо закрытия (частичная оценка):
function addition(x,y) {
if (typeof y === "undefined") {
return new Function('y','return '+x+' + y;');
}
return x + y;
}
var additionRemaining = addition(3); // Currying
additionRemaining(5);//add 5 to 3
Насколько я понимаю, ваш второй пример с использованием 'new Function 'также использует закрытие. – Rudra
@Ruda: второй пример не создает функцию, которая равна 'function (y) {return 3 + y;}' '' '' 'жестко закодирована в возвращаемой функции, поэтому эта функция не имеет доступа к переменным, которые не входят в его объем. Если вы напишете 'return new Function ('y', 'console.log (x); return' + x + '+ y;');' вы можете видеть, что 'x' не определяется в рамках этой функции. –
@t Получил разницу, но до сих пор неясно о других (более простых) способах создания функции карри. Предположим, у меня есть функция, принимающая 3 параметра, в этом случае я должен создать 3 функции, вложенные в иерархию. И зачем мне даже создавать функцию карри ?. – Rudra
Слишком широкое: Есть либо слишком много возможных ответов, или хорошие ответы будут слишком длинный для этого формата. Пожалуйста, добавьте детали, чтобы сузить набор ответов или изолировать проблему, на которую можно ответить в нескольких абзацах. – thefourtheye
Дополнительную информацию можно найти по адресу: http://stackoverflow.com/questions/36314/what-is-currying –
Да, в то время как при закрытых закрытых закрытых крышках, при работе с закрытыми крышками. Например, 'function add (a) {return function (b) {return a + b; }; } '- это функция, которая возвращает функцию закрытия (b) {return a + b; } ', который закрывается над upvalue' a'. Однако тривиально все функции JavaScript являются закрытием. Прочтите следующий ответ для получения дополнительной информации: http://stackoverflow.com/a/12931785/783743 –