第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

閉包的一個常見的問題

閉包的一個常見的問題

胡說叔叔 2019-05-24 12:18:19
作用域鏈的這種配置機(jī)制引出了一個值得注意的副作用,即閉包只能取得包含函數(shù)中任何變量的最后一個值。別忘了閉包所保存的是整個變量對象,而不是某個特殊的變量。下面這個例子可以清晰的說明這個問題。functioncreateFunction(){varresult=newArray();for(vari=0;i
查看完整描述

2 回答

?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個贊

其實(shí)你最后的這個例子。。為什么還要寫函數(shù)。。直接
return[i]=i;
是一個意思。。
書上面沒有這么改,估計是這么用。
vara=createFunction();
a[6]();//我估計后面有一個調(diào)用的過程,所以result[i]每次都寫成一個函數(shù)體
你這么改之后,result[i]就是一個Number類型的值,result[i]()會報錯。
估計我之前踩過的坑可能對你有點(diǎn)幫助?
(只是一個閃念的記錄,估計會有很多不規(guī)范的地方,歡迎指正)
for循環(huán)閉包問題--流沙渡
                            
查看完整回答
反對 回復(fù) 2019-05-24
?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個贊

按照個人理解回答一下:
1.在createFunction函數(shù)執(zhí)行時會產(chǎn)生其作用域鏈,指向自身活動對象如this,arguments等(當(dāng)然還有指向全局對象,只不過是函數(shù)定義時就有了)其中包括result和i,當(dāng)函數(shù)執(zhí)行完成時,i的最終結(jié)果為10,result是一個數(shù)組,其中每個元素是一個匿名函數(shù)并且返回i;所以如果拿到返回的result去執(zhí)行每一個元素時,都要去相同的作用域中訪問i元素,也就是每次都是10。
2.改變寫法后唯一的不同是把數(shù)組元素用匿名函數(shù)賦值的方式改成了立即執(zhí)行函數(shù)的返回值賦值,這其中最大的區(qū)別就是立即執(zhí)行函數(shù)又生成了自身的函數(shù)作用域,其中每一個作用域都包含了當(dāng)時以參數(shù)形式傳入的num,也就是執(zhí)行時的i值。這相當(dāng)于把i的0-10這些狀態(tài)分別保存到了各自的作用域中。此時再通過result去執(zhí)行每一個元素,就會到其各自的作用域中去找i的值,也就是可以輸出0-10這些個值了。
3.因?yàn)椴荒懿捎么藢懛ā?pre>
                            
查看完整回答
反對 回復(fù) 2019-05-24
  • 2 回答
  • 0 關(guān)注
  • 345 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號