JavaScript中的“ currying”和“ closure”之间有什么区别吗?


回答 1:

创建闭包只不过是访问函数范围之外的变量。请注意,函数内部的函数不是闭包。当需要访问函数范围之外的变量时,总是使用闭包。

这是关闭示例

咖喱化是将n个参数的单个函数转换为n个具有单个参数的函数。因此,可以说Currying是一种将一个以上自变量的功能简化为一个自变量的功能的方法。

这是JavaScript中Currying函数的示例

咖喱函数使用闭包的属性。


回答 2:

其他答案是正确的,因为Currying和Closures是两个不同的概念。但是,它们在某种意义上是相关的,两者都可以用来完成某些相同的事情。

以下面的关闭为例,它执行与部分应用程序相同的功能

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

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

这通常是通过像这样(使用ramda.js)来实现的。

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

是的,这是两个不同的概念,但是就像编程中的许多概念一样,有许多不同的方法可以完成相同的任务。即使这些方法非常相似,但实际情况仍有很多不同。


回答 3:

其他答案是正确的,因为Currying和Closures是两个不同的概念。但是,它们在某种意义上是相关的,两者都可以用来完成某些相同的事情。

以下面的关闭为例,它执行与部分应用程序相同的功能

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

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

这通常是通过像这样(使用ramda.js)来实现的。

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

是的,这是两个不同的概念,但是就像编程中的许多概念一样,有许多不同的方法可以完成相同的任务。即使这些方法非常相似,但实际情况仍有很多不同。


回答 4:

其他答案是正确的,因为Currying和Closures是两个不同的概念。但是,它们在某种意义上是相关的,两者都可以用来完成某些相同的事情。

以下面的关闭为例,它执行与部分应用程序相同的功能

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

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

这通常是通过像这样(使用ramda.js)来实现的。

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

是的,这是两个不同的概念,但是就像编程中的许多概念一样,有许多不同的方法可以完成相同的任务。即使这些方法非常相似,但实际情况仍有很多不同。