有谁知道为什么case1输出相同的结果,而case2输出顺序结果?我知道case1输出相同值的原因是函数中每个函数的闭包将访问切片到相同的范围。
但是,为什么在每个循环中添加 i:=i 后,case2 可以输出顺序结果呢?在每循环中重新定义 i 后,是否会生成一个新作用域?喜欢让在爪哇脚本?
案例1
func main() {
funcs := []func() {}
for i:=0;i<10;i++{
funcs = append(funcs, func() {
fmt.Println(i)
})
}
for i:=0;i<10;i++{
funcs[i]()
}
}
输出
10
10
10
10
10
10
10
10
10
10
案例2
func main() {
funcs := []func() {}
for i:=0;i<10;i++{
i := i
funcs = append(funcs, func() {
fmt.Println(i)
})
}
for i:=0;i<10;i++{
funcs[i]()
}
}
输出
0
1
2
3
4
5
6
7
8
9
www说
杨__羊羊
随时随地看视频慕课网APP
相关分类