关于函数闭包的疑问
Question:
- 为何输出都为4,不应该是0,1,2,3吗,每次执行的4是怎么来的呢
- [4]func(){},数组中的4是指 4个匿名函数吗
fs[i] = func() {fmt.Println("打印i = ", i)}
这句赋值会执行打印吗- 将
[4]func(){}
中的数值该大或者改小为什么会出现问题呢,小则都不执行报 goroutine ,增大则会执行且报 goroutine [4]func(){}
为什么不能定义成一个 slice
Code:
package main
import "fmt"
func main() {
var fs [4]func()
{
}
for i := 0; i < 4; i++ {
fs[i] = func() {
fmt.Println("打印i = ", i)
}
}
for _, f := range fs {
f()
}
}
Outpit:
打印i = 4
打印i = 4
打印i = 4
打印i = 4
进程 已完成,退出代码为 0
闭包捕获的是你外部 for 里面的局部变量 i,i 迭代4次之后值为4,然后执行闭包就输出 i,也就是 4