-
定义
函数在变量不处于其有效作用域时,还能够对变量进行访问,即为闭包;也就是说,变量超出了其作用域,还可以使用,就是闭包现象。
-
可能针对的使用场景之一?
比方说,年底了,公司针对每个部门的奖金是不同。比方说,销售部门奖金为10000,研发部门是15000,测试部门12000等,就可以使用闭包来实现
例子,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | object BiBaoTest { def main(args : Array[String]) : Unit = { val salesDepartment = add( 10000 ) //变量salesDepartment相等于一个匿名函数,wages + 10000 println( "---->:\t" + salesDepartment( 10 )) //为销售部门的某一个员工发工资,基本工资是10 val rDdepartment = add( 15000 ) //变量rDdepartment相等于一个匿名函数,wages + 15000 println( "---->:\t" + rDdepartment( 100 )) val testDepartment = add( 12000 ) //变量testDepartment相等于一个匿名函数,wages + 12000 println( "---->:\t" + testDepartment( 10 )) } def add(bonus : Int) = (wages : Int) = > wages + bonus //bonus,这种形式就是闭包现象 } |
或者这样理解,闭包,是具有某种规律的匿名函数的,更高层次的抽象,
如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | (x : Int) = > x + 1 (x : Int) = > x + 14 (x : Int) = > x + 3 (x : Int) = > x + 9 (x : Int) = > x + 7 (x : Int) = > x + 10 (x : Int) = > x + 100 ... 这种匿名函数,结构上,很相似,整体是累加运算,因此,可以抽象成 def add(y : Int) = (x : Int) = > x + y 这种形式 |
也就是说,传入的y值不同,就会返回不同的匿名函数