Existe alguma diferença entre 'currying' e 'encerramento' em JavaScript?


resposta 1:

Criar um fechamento nada mais é do que acessar uma variável fora do escopo de uma função. Observe que uma função dentro de uma função não é um fechamento. Os fechamentos sempre são usados ​​quando é necessário acessar as variáveis ​​fora do escopo da função.

Aqui está o exemplo de fechamentos

Currying está convertendo uma única função de n argumentos em n funções com um único argumento cada. Então, você pode dizer que Currying é uma maneira de reduzir funções de mais de um argumento para funções de um argumento.

Aqui está o exemplo da função Currying em JavaScript

As funções de curry usam a propriedade Closures.


resposta 2:

As outras respostas estão corretas, pois Currying e Closures são dois conceitos diferentes. No entanto, eles estão relacionados no sentido de que ambos podem ser usados ​​para realizar algumas das mesmas coisas.

Tomemos, por exemplo, o seguinte encerramento para executar a mesma funcionalidade que o aplicativo parcial

const makeAdder (x) {
return (y) => {
retornar x + y
}
}

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

Isso geralmente é realizado com curry (usando ramda.js)

const makeAdder = (x, y) => {
 retornar x + y
}
const curriedMakeAdder = R.curry (makeAdder)
const add9 = curriedMakeAdder (9)
console.log (add9 (2)) // 11

Então, sim, os dois são conceitos diferentes, mas, como muitos conceitos de programação, existem muitas maneiras diferentes de realizar a mesma tarefa. Mesmo que os métodos sejam bastante semelhantes, há muita coisa acontecendo sob o capô.


resposta 3:

As outras respostas estão corretas, pois Currying e Closures são dois conceitos diferentes. No entanto, eles estão relacionados no sentido de que ambos podem ser usados ​​para realizar algumas das mesmas coisas.

Tomemos, por exemplo, o seguinte encerramento para executar a mesma funcionalidade que o aplicativo parcial

const makeAdder (x) {
return (y) => {
retornar x + y
}
}

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

Isso geralmente é realizado com curry (usando ramda.js)

const makeAdder = (x, y) => {
 retornar x + y
}
const curriedMakeAdder = R.curry (makeAdder)
const add9 = curriedMakeAdder (9)
console.log (add9 (2)) // 11

Então, sim, os dois são conceitos diferentes, mas, como muitos conceitos de programação, existem muitas maneiras diferentes de realizar a mesma tarefa. Mesmo que os métodos sejam bastante semelhantes, há muita coisa acontecendo sob o capô.


resposta 4:

As outras respostas estão corretas, pois Currying e Closures são dois conceitos diferentes. No entanto, eles estão relacionados no sentido de que ambos podem ser usados ​​para realizar algumas das mesmas coisas.

Tomemos, por exemplo, o seguinte encerramento para executar a mesma funcionalidade que o aplicativo parcial

const makeAdder (x) {
return (y) => {
retornar x + y
}
}

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

Isso geralmente é realizado com curry (usando ramda.js)

const makeAdder = (x, y) => {
 retornar x + y
}
const curriedMakeAdder = R.curry (makeAdder)
const add9 = curriedMakeAdder (9)
console.log (add9 (2)) // 11

Então, sim, os dois são conceitos diferentes, mas, como muitos conceitos de programação, existem muitas maneiras diferentes de realizar a mesma tarefa. Mesmo que os métodos sejam bastante semelhantes, há muita coisa acontecendo sob o capô.