闭包的实质就是代码与用到的非局部变量的混合,即:
闭包 = 代码 + 用到的非局部变量
例如,我们定义一个值函数 sum:
此时 Scala 解释器提示找不到 y 这个值,这是因为我们根本就没有定义 y 这个变量,所以 Scala 解释器不知道 y 究竟是什么内容。接下来我们定义一个变量 y :
现在已经不再报错了,直接调用值函数 sum:
此时 sum 函数的值是6,这是因为我们在值函数外面声明了一个全局变量,然后值函数中的 y 捕获到了这个全局变量,从而使 x + y 变成一个正常的函数定义,让函数的定义闭合起来,这就是闭包。如果改变 y 的值,闭包也可以捕获到这个变化的 y 的值,例如让 y = 15 之后再调用值函数 sum:
此时值函数 sum 的返回值变成了 20
以上就是 Scala 中基础的闭包概念