骚气的陷阱

先看一段代码

` var funcs = [ ];
for (var i = 0; i < 10; i++)
{ funcs.push(function() { console.log(i) }) }

funcs.forEach(function(func)
{
func()
})
`

乍一看,以为输出 0~9 ,结果调试一看输出10个10。
So why?
首先,你要理解闭包的概念,其中你应该理解()才是函数执行部分,

那么引出了我要提出
的两个解决方案,其中一个就是ec5闭包
var funcs = [ ] for (var i = 0; i < 10; i++) { funcs.push( (function(value) { return function() { console.log(value) } })(i) ) } funcs.forEach(function(func) { func() } )
此时,我们push进去的是一个函数作用域,那么对于funcs,
自然可以输出0~9 ,
第二种方案即es6提供的箭头函数,
var funcs = [ ] for (var i = 0; i < 10; i++) { funcs.push( (function(value) { return function() { console.log(value); } })(i) ) } funcs.forEach(fun=>fun())
原理与之类似。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.提升身体能量 衔接昨日的知识,体质是最底层的需求,吃睡运动,吃是第一个需要满足的 2.提升情绪精力 积极情绪是...
    唐花花阅读 897评论 0 0
  • 在年少的岁月里,我们曾无限的幻想;自己有一天会不会像小鸟一样,在空中划过一道弧线。会不会像风一样,四处飘散,没有方...
    巷北狸猫O阅读 3,161评论 5 11
  • 1 杨宇走在一条昏暗的小巷内,眼前的黑暗仿佛一张漆黑的大口。他咽了口口水,走了过去。不久之后,黑暗扔出了几根骨头,...
    来学校补习班阅读 4,198评论 4 5
  • 1. 整型 byte 代表一个字节的大小 8bit 2(8) -128~128 short 代表两个字节的...
    星辰361阅读 1,599评论 0 0
  • 当下的社会,变化太快,由于太多的不确定性,民众普遍焦虑,看不到出口,不知道这个社会将要走向哪里,人们大都有一...
    杨林柯阅读 4,535评论 0 3