經(jīng)典面試題之JavaScript?for循環(huán)(var?let)
如果你也在面試找工作,那么也一定遇到過(guò)這道for循環(huán)打印結(jié)果的題,下面我們來(lái)探討下
var循環(huán)
for(var i = 0; i < 10; i++) {
setTimeout(function(){console.log(i)});
}先把答案寫出來(lái)

下面來(lái)講一下原因:
劃重點(diǎn)
① var
②setTimeout()
重點(diǎn)1:你需要了解一下變量提升(hoisting)
var變量聲明,無(wú)論發(fā)生在何處,都在執(zhí)行任何代碼之前進(jìn)行處理。
用var聲明的變量的作用域是它當(dāng)前的執(zhí)行上下文,它可以是嵌套的函數(shù),也可以是聲明在任何函數(shù)外的變量。如果你重新聲明一個(gè) JavaScript 變量,它將不會(huì)丟失其值。
然后上面的代碼其實(shí)是這樣的
var i = 0;
for (; i < 10; i++) {
setTimeout(function () {
console.log(i)
})
}重點(diǎn)2、setTimeout()
它總是在當(dāng)前的同步代碼執(zhí)行完成后開始運(yùn)行。(出自簡(jiǎn)書---一斤代碼)
可以加入log進(jìn)行跟蹤驗(yàn)證:、
var i = 0;
for (; i < 10; i++) {
console.log('+++++', i)
setTimeout(function () {
console.log(i)
})
}執(zhí)行結(jié)果:
+++++ 0
+++++ 1
+++++ 2
+++++ 3
+++++ 4
+++++ 5
+++++ 6
+++++ 7
+++++ 8
+++++ 9
10
10
10
10
10
10
10
10
10
10
由此可見,當(dāng)開始執(zhí)行setTimeout()中的代碼時(shí)for循環(huán)外面的變量i就已經(jīng)變成了10,使用console.log(i)從作用域查找到的i值就是10,然后循環(huán)十次10。
let循環(huán)
ES6的let/const,簡(jiǎn)單來(lái)說(shuō)let/const是聲明塊級(jí)作用域的變量
for(let i = 0; i < 10; i++) {
setTimeout(function(){console.log(i)});
}下面是打印結(jié)果:

到此這篇關(guān)于經(jīng)典面試題之JavaScript for循環(huán)(var let)的文章就介紹到這了,更多相關(guān)js for循環(huán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript清空數(shù)組元素的兩種方法簡(jiǎn)單比較
這篇文章主要介紹了JavaScript清空數(shù)組元素的兩種方法簡(jiǎn)單比較,羅列了幾種常見的情況javascript數(shù)組的方法,并且比較了其中的兩種常見方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
javascript中使用replaceAll()函數(shù)實(shí)現(xiàn)字符替換的方法
第一次發(fā)現(xiàn)JavaScript中replace()?方法如果直接用str.replace("-","!")?只會(huì)替換第一個(gè)匹配的字符.2010-12-12
使用 JScript 創(chuàng)建 .exe 或 .dll 文件的方法
JScript 是由微軟開發(fā)的活動(dòng)腳本語(yǔ)言,基于 ECMAScript 規(guī)范實(shí)現(xiàn)。Internet Explorer 中的 JavaScript,實(shí)際上是指 JScript。2011-07-07
微信小程序?qū)崿F(xiàn)富文本圖片寬度自適應(yīng)的方法
小程序里圖片會(huì)顯示不全,這時(shí)就應(yīng)該做相應(yīng)的處理,使小程序里圖片顯示正確,這篇文章主要介紹了微信小程序?qū)崿F(xiàn)富文本圖片寬度自適應(yīng)的方法,感興趣的小伙伴們可以參考一下2019-01-01
詳細(xì)介紹適用于小程序的jsEncrypt.js與jsencrypt.min.js加密庫(kù)
jsencrypt.min.js是一個(gè)JavaScript庫(kù),它允許開發(fā)者在前端實(shí)現(xiàn)RSA加密和解密操作,而無(wú)需深入理解加密算法的底層實(shí)現(xiàn),這篇文章主要介紹了適用于小程序的jsEncrypt.js與jsencrypt.min.js加密庫(kù)的相關(guān)資料,需要的朋友可以參考下2025-10-10
JavaScript實(shí)現(xiàn)PDF加載與顯示的技術(shù)指南
在Web開發(fā)中,利用JavaScript技術(shù)加載和顯示PDF文件是一種常見需求,尤其是在文檔預(yù)覽或在線閱讀器的開發(fā)中,本文詳細(xì)介紹了使用JavaScript庫(kù),特別是PDF.js,來(lái)實(shí)現(xiàn)PDF文件在瀏覽器中的加載和顯示,需要的朋友可以參考下2025-08-08

