• 动态作用域,词法作用域
    • 把数据和作用域绑定到一起就是闭包。
    • 将一个上下文的私有变量的生命周期延长的机制。
    • 调用了局部变量函数就是闭包!

    引用环境

    1. // 闭包:函数的运行环境
    2. // 函数的作用域没有被释放,作用域包含了函数运行的状态、变量、本地类、本地函数,这个作用域就是闭包
    3. fun makeFun(): ()->Unit // ()->Unit 函数是 makeFun() 的返回值,即函数的返回值是一个函数
    4. // makeFun()的函数体
    5. {
    6. var count = 0
    7. return fun(){
    8. println(++count)
    9. }
    10. fun fibonacci(): Iterable<Long>{
    11. var first = 0L
    12. var second = 1L
    13. object : LongIterator(){
    14. override fun nextLong(): Long {
    15. val result = second
    16. second += first
    17. first = second - first
    18. return result
    19. }
    20. override fun hasNext() = true
    21. }
    22. }
    23. }
    24. fun main(args: Array<String>) {
    25. val add5 = add(5)
    26. println(add5(2))
    27. }
    28. //fun add(x: Int) = fun(y: Int) = x + y
    29. fun add(x: Int): (Int)-> Int{
    30. data class Person(val name: String, val age: Int)
    31. return fun(y: Int): Int{
    32. return x + y