Post

闭包

定义

  • 官方:是由函数和其相关的引用环境组合而成的实体

闭包和变量逃逸

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    func incr() func() int {
    	var x int
    	return func() int {
    		x++
    		return x
    	}
    }
      
    func main() {
       i := incr()
      
       println(i()) // 1
       println(i()) // 2
       println(i()) // 3 
    }
    
  • i就是一个闭包,i中有一个指针指向x

  • x离开了作用域还存在,也是逃逸了

闭包引用

  • 1
    2
    3
    4
    5
    
    x := 1
    func() {
    	println(&x) // 0xc0000de790
    }()
    println(&x) // 0xc0000de790
    
  • 闭包内对外层变量是引用

循环中闭包引用

闭包延时绑定

This post is licensed under CC BY 4.0 by the author.