scala outline
闭包解释
闭包:
内层函数f2要访问外层函数f1局部变量a,当外层函数f1执行结束之后,f1会释放栈内存,但是会自动的延长f1函数的局部变量的生命周期,和内层函数f2形成一个闭合的效果,我们将这种闭合的效果称之为闭包
代码示意
如果存在闭包,那么编译器会生成包含$anonfun$的字节码文件
def main(args: Array[String]): Unit = {
println(f1()(5))
def f1(): (Int) => Int = {
var a: Int = 4
def f2(b: Int): Int = { // f2中用到了局部变量a
a + b
}
f2 _
}
}
代码简化
def main(args: Array[String]): Unit = {
println(f1()(5))
def f1(): (Int) => Int = {
var a: Int = 4
// 可以使用匿名函数的形式
(b:Int)=>{a+b} // 最后一行,默认可作为返回值
}
}
注意:
为什么要函数嵌套函数?
为了减少内存开销