当前位置: 首页 > 网络应用技术

GO语言匿名范围的范围陷阱范围

时间:2023-03-07 10:11:18 网络应用技术

  众所周知,该函数也可以用作GO语言中的变量。我们可以使用函数面数量来指定任何表达式中的函数变量。但是在编写代码时,请注意,如果一个函数未由此函数中定义的变量确定,则该变量的生命周期未由其范围确定呢

  本段是什么意思,例如在GO语言圣经中使用代码:

  在此程序中,函数平方返回带有func()int的函数类型,但是每次调用f()时,匿名函数的内部将根据x的原始值进行更新,以更新x以更新xx x。x值的值为0,所有代码的最终执行结果为1 2 3 4。

  这表明内层中的匿名函数可以在外层上获得和更新平方函数的局部变量。变量x在返回主函数中的平方函数后仍然存在。我们可以理解类比与全局变量和函数之间的关系:正方形函数被视为独立的GO程序,因此局部变量x可以被视为平方函数中的全局变量。相同的变量。我们添加该变量的地址输出验证以正确验证:

  结果:

  可以看出,变量X确实是相同的变量,因此,当我们捕获迭代变量时使用匿名函数时,我们需要小心地查看以下程序:

  在此程序中,变量i在一个块中声明,即在for循环中介绍了变量i。根据以前的经验,我们可以知道在周期共享相同变量中创建的所有函数变量。。操作结果还可以证明这一点:

  我们经常引入一个内部变量来解决此问题,声明副本,并将本副本的值传递到直接传递i的值:

  这得到了我们想要的结果:我们想要: