闭包和变量作用域

董泽润 · · 284 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

先来个例子:


例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

本文来自:简书

感谢作者:董泽润

查看原文:闭包和变量作用域

284 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传