騷氣的陷阱

先看一段代碼

` 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.提升情緒精力 積極情緒是...
    唐花花閱讀 135評論 0 0
  • 在年少的歲月里,我們曾無限的幻想;自己有一天會不會像小鳥一樣,在空中劃過一道弧線。會不會像風一樣,四處飄散,沒有方...
    巷北貍貓O閱讀 444評論 5 11
  • 1 楊宇走在一條昏暗的小巷內,眼前的黑暗仿佛一張漆黑的大口。他咽了口口水,走了過去。不久之后,黑暗扔出了幾根骨頭,...
    來學校補習班閱讀 819評論 4 5
  • 1. 整型 byte 代表一個字節的大小 8bit 2(8) -128~128 short 代表兩個字節的...
    星辰361閱讀 237評論 0 0
  • 當下的社會,變化太快,由于太多的不確定性,民眾普遍焦慮,看不到出口,不知道這個社會將要走向哪里,人們大都有一...
    楊林柯閱讀 1,000評論 0 3