先看一段代碼
` var funcs = [ ];
for (var i = 0; i < 10; i++)
{ funcs.push(function() { console.log(i) }) }
funcs.forEach(function(func)
{
func()
})
`
乍一看刻炒,以為輸出 0~9 ,結(jié)果調(diào)試一看輸出10個10。
So why?
首先音婶,你要理解閉包的概念棒拂,其中你應(yīng)該理解()才是函數(shù)執(zhí)行部分,
那么引出了我要提出
的兩個解決方案写隶,其中一個就是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進(jìn)去的是一個函數(shù)作用域,那么對于funcs慕趴,
自然可以輸出0~9 痪蝇,
第二種方案即es6提供的箭頭函數(shù),
var funcs = [ ] for (var i = 0; i < 10; i++) { funcs.push( (function(value) { return function() { console.log(value)冕房; } })(i) ) } funcs.forEach(fun=>fun())
原理與之類似躏啰。