先看一段代码
` 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())
原理与之类似。