基础基础基础基础基础!!!!,这是一个屡踩屡犯的坑,不只一次了...
先来个例子:
很简单的,执行后依次打印1, 2, 3, 4, 5. 再增加匿名函数
在匿名函数里打印 n 值,执行后一次打印1, 2, 3, 4, 5. 我的使用场景很简单,广告有很多过滤插件,很多可以复用同一个struct, 只是根据name来区分。过滤条件要在一个全局map里进行注册,以供后续使用,逻辑类似例3:
代码逻辑比较清晰,执行后确发现输出是5, 5, 5, 5, 5 ......
其实原理很简单,和python的也很像,闭包是惰性的生成fn时 n 是在for 循环外层的,等执行fn时 n 早已经变成5了。修复起来很简单,n 以传参的形式给fn,或是for循环内部生成一个临时对象拷贝n值。
有疑问加站长微信联系(非本文作者)