javascript - Scala 中的闭包如何工作?

标签 javascript scala closures

我理解闭包是一个函数,其返回值取决于其外部函数中定义的数据。在 javascript 中,我们可以像这样向内部函数发送参数

    add(x) {
       return addplus(y) {
                let z = this.x + y ;
                return z;
              }
    }
   var op = add(10)(20);

scala 中的闭包是否也类似于 javascript 闭包?在 scala 中向内部函数发送参数是否太有效?

最佳答案

闭包是一个函数,它捕获定义它的外部作用域,因此可以访问在其自身作用域之外定义的实体。

闭包的一种可能用途是您所描述的,尽管利用它的技术(如评论中提到的)被称为柯里化(Currying),即使用n建模函数code> 参数作为一个参数,返回一个采用 n - 1 个参数的函数。

您可以在 Scala 中逐行移植 Javascript 代码:

def add(x: Int): Int => Int =
  y => x + y

另外,请注意 Scala 本身支持柯里化(Currying):

def add(x: Int)(y: Int): Int =
  x + y

这两者在语义上是等价的,通过部分应用它们中的任何一个,您将得到一个函数,该函数返回一个将 x 与其参数相加的函数。也可以完全应用。

val following: Int => Int = add(1)
val two = following(1)
val three = following(two)
val four = add(two)(two)

关于javascript - Scala 中的闭包如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42247553/

相关文章:

javascript - 我如何使用 jQuery 向我的网站添加 slider 过渡?

javascript - 如何使用 jquery css 将按钮的背景图像分配给变量

scala - scala中的包名查找规则

rust - 为什么闭包会引入借用,而内联的相同代码却不会引入借用?

javascript - javascript 中的 Youtube 数据 API 通知新视频

javascript - 使用 Javascript 解析 Freemarker 模板

scala Iterable#map 与 Iterable#flatMap

scala - 将 Scala 数组转换为 Java 数组的最快方法

javascript - 为什么此函数的新调用会创建新的作用域链和新的私有(private)变量?

rust - 为什么通过 DerefMut 可变借用闭包不起作用?