先看一段代碼
` 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())
原理與之類似。