1、概念:
以前函数的执行只依赖传入函数的参数值,与调用函数的上下文无关;
当函数的执行依赖于声明在函数外部的一个或者多个变量时,则称这个函数为闭包;
2、举例
object BiBao extends App {
var flag=10
val func=(a:Int)=>a+flag
println(func(4)) //14
flag=20
println(func(4)) //24
}
flag称为函数外部的自由变量,它的值将在函数被调用时确定;
3、闭包可以捕获自由变量的变化,也可以改变自由变量的值;
object BiBao extends App {
var flag=0
val func=(a:Int)=>flag+=a
func(4)
println(flag) //4
}