首先上代码
题目一:
再运行下面代码
题目二:
题目三:
以下分析摘自网上资料:
原理剖析
for index, value := range xxxindexvalue
回答以上问题,记住以下两点即可。
循环变量是易变的
首先,循环变量实际上只是一个普通的变量。
for index, value := range xxx
如果循环体中会启动协程(并且协程会使用循环变量),就需要格外注意了,因为很可能循环结束后协程才开始执行,
此时,所有协程使用的循环变量有可能已被改写。(是否会改写取决于引用循环变量的方式)
循环变量需要绑定
tasktask
tasktask
总结
简单点来说
- 如果循环体没有并发出现,则引用循环变量一般不会出现问题;
- 如果循环体有并发,则根据引用循环变量的位置不同而有所区别
- 通过参数完成绑定,则一般没有问题;
- 函数体中引用,则需要显式地绑定