Има ли разлика между "currying" и "затваряне" в JavaScript?


Отговор 1:

Създаването на затваряне не е нищо повече от достъп до променлива извън обхвата на функцията. Моля, обърнете внимание, че функция във функцията не е затваряне. Затварянията винаги се използват, когато е необходимо за достъп до променливите извън обхвата на функцията.

Ето примера на затварянията

Currying е преобразуване на една функция от n аргументи в n функции с по един аргумент всеки. Така че можете да кажете, че Currying е начин за намаляване на функциите на повече от един аргумент до функции на един аргумент.

Ето примера с функцията Currying в JavaScript

Функциите за теглене използват свойството Closures.


Отговор 2:

Другите отговори са верни, тъй като Currying and Clusures са две различни концепции. Те обаче са свързани в смисъл, че и двете могат да бъдат използвани за постигане на някои от едни и същи неща.

Вземете например следното затваряне, за да изпълните същата функционалност като частичното приложение

const makeAdder (x) {
връщане (у) => {
върнете х + у
}
}

const add9 = makeAdder (9)
console.log (add9 (2)) // 11

Това често се постига с къри така (използвайки ramda.js)

const makeAdder = (x, y) => {
 върнете х + у
}
const curriedMakeAdder = R.curry (makeAdder)
const add9 = curriedMakeAdder (9)
console.log (add9 (2)) // 11

Така че да, двете са различни концепции, но както много концепции в програмирането, има много различни начини за изпълнение на една и съща задача. Дори методите да са доста сходни, под капака се случва много различно.


Отговор 3:

Другите отговори са верни, тъй като Currying and Clusures са две различни концепции. Те обаче са свързани в смисъл, че и двете могат да бъдат използвани за постигане на някои от едни и същи неща.

Вземете например следното затваряне, за да изпълните същата функционалност като частичното приложение

const makeAdder (x) {
връщане (у) => {
върнете х + у
}
}

const add9 = makeAdder (9)
console.log (add9 (2)) // 11

Това често се постига с къри така (използвайки ramda.js)

const makeAdder = (x, y) => {
 върнете х + у
}
const curriedMakeAdder = R.curry (makeAdder)
const add9 = curriedMakeAdder (9)
console.log (add9 (2)) // 11

Така че да, двете са различни концепции, но както много концепции в програмирането, има много различни начини за изпълнение на една и съща задача. Дори методите да са доста сходни, под капака се случва много различно.


Отговор 4:

Другите отговори са верни, тъй като Currying and Clusures са две различни концепции. Те обаче са свързани в смисъл, че и двете могат да бъдат използвани за постигане на някои от едни и същи неща.

Вземете например следното затваряне, за да изпълните същата функционалност като частичното приложение

const makeAdder (x) {
връщане (у) => {
върнете х + у
}
}

const add9 = makeAdder (9)
console.log (add9 (2)) // 11

Това често се постига с къри така (използвайки ramda.js)

const makeAdder = (x, y) => {
 върнете х + у
}
const curriedMakeAdder = R.curry (makeAdder)
const add9 = curriedMakeAdder (9)
console.log (add9 (2)) // 11

Така че да, двете са различни концепции, но както много концепции в програмирането, има много различни начини за изпълнение на една и съща задача. Дори методите да са доста сходни, под капака се случва много различно.