- 动态作用域,词法作用域
- 把数据和作用域绑定到一起就是闭包。
- 将一个上下文的私有变量的生命周期延长的机制。
- 调用了局部变量的函数就是闭包!
引用环境
// 闭包:函数的运行环境
// 函数的作用域没有被释放,作用域包含了函数运行的状态、变量、本地类、本地函数,这个作用域就是闭包
fun makeFun(): ()->Unit // ()->Unit 函数是 makeFun() 的返回值,即函数的返回值是一个函数
// makeFun()的函数体
{
var count = 0
return fun(){
println(++count)
}
fun fibonacci(): Iterable<Long>{
var first = 0L
var second = 1L
object : LongIterator(){
override fun nextLong(): Long {
val result = second
second += first
first = second - first
return result
}
override fun hasNext() = true
}
}
}
fun main(args: Array<String>) {
val add5 = add(5)
println(add5(2))
}
//fun add(x: Int) = fun(y: Int) = x + y
fun add(x: Int): (Int)-> Int{
data class Person(val name: String, val age: Int)
return fun(y: Int): Int{
return x + y