const Greeters = []
for (var i = 0 ; i < 10 ; i++) {
Greeters.push(function () { return console.log(i) })
}
Greeters[0]() // 10
Greeters[1]() // 10
Greeters[2]() // 10
const Greeters = []
for (let i = 0 ; i < 10 ; i++) {
Greeters.push(function () { return console.log(i) })
}
Greeters[0]() // 0
Greeters[1]() // 1
Greeters[2]() // 2
第二個用let后面不應(yīng)該是undefined嗎。。
還有為什么Greeters數(shù)組里保存的是[function () { return console.log(i)},function () { return console.log(i)},...,function () { return console.log(i)}]而不是
[function () { return console.log(0)},function () { return console.log(1)},...,function () { return console.log(9)}]?
典型面試題,變量生命周期問題,for循環(huán)問題和函數(shù)形參問題。
let和var的不同,var是在當前代碼塊結(jié)束之后仍然在內(nèi)存保留該變量和值,而let則是不保留,直接回收。
而for循環(huán)輸出是等到循環(huán)全部結(jié)束。
所以第一種全部都是10。
而第二種方式不是undefined呢,很簡單,用到了閉包,注意這里返回的不是值,而是函數(shù),如果第二種直接輸出,那就是undefined,但是現(xiàn)在返回函數(shù),我們還記得函數(shù)的形參嗎,沒錯,函數(shù)調(diào)用時形參是對實參的一個復(fù)制,所以在輸出時實參雖然被回收了,但是形參還保留了值。所以JS中循環(huán)取值和輸出的最簡單解決方式就是閉包。
第一種情況,我覺得相當于這樣:
var i;
function print() {
return console.log(i);
}
const Greeters = []
for (i = 0 ; i < 10 ; i++) {
Greeters.push(print);
}
console.log(`Now i=${i}`);// 注意這里i = 10;
Greeters[0]() // 10
Greeters[1]() // 10
Greeters[2]() // 10
第二組情況,let 活動范圍僅限于for循環(huán)中,那么每次把函數(shù)加入到數(shù)組中時,i傳遞了當前的i值,
function () {
return console.log(i);
}北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。