闭包和变量作用域

2016-04-06  本文已影响161人  董泽润

基础基础基础基础基础!!!!,这是一个屡踩屡犯的坑,不只一次了...

先来个例子:

例1

很简单的,执行后依次打印1, 2, 3, 4, 5. 再增加匿名函数

例2 

在匿名函数里打印 n 值,执行后一次打印1, 2, 3, 4, 5. 我的使用场景很简单,广告有很多过滤插件,很多可以复用同一个struct, 只是根据name来区分。过滤条件要在一个全局map里进行注册,以供后续使用,逻辑类似例3:

例3

代码逻辑比较清晰,执行后确发现输出是5, 5, 5, 5, 5 ......

其实原理很简单,和python的也很像,闭包是惰性的生成fn时 n 是在for 循环外层的,等执行fn时 n 早已经变成5了。修复起来很简单,n 以传参的形式给fn,或是for循环内部生成一个临时对象拷贝n值。

例4
上一篇 下一篇

猜你喜欢

热点阅读