国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

解析JavaScript循環(huán)和作用域之間的關(guān)系(附代碼)

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 19:31:08
文檔

解析JavaScript循環(huán)和作用域之間的關(guān)系(附代碼)

解析JavaScript循環(huán)和作用域之間的關(guān)系(附代碼):我們在工作中經(jīng)常會用到JavaScript,他與我們的工作有密切的關(guān)系。但是JavaScript有一個特點(diǎn),也許會讓開發(fā)者頭痛, 是其循環(huán)和作用域相關(guān)的,那接下里就說說他們之間的關(guān)系。舉個例子:const operations = [] for (var i = 0; i < 5
推薦度:
導(dǎo)讀解析JavaScript循環(huán)和作用域之間的關(guān)系(附代碼):我們在工作中經(jīng)常會用到JavaScript,他與我們的工作有密切的關(guān)系。但是JavaScript有一個特點(diǎn),也許會讓開發(fā)者頭痛, 是其循環(huán)和作用域相關(guān)的,那接下里就說說他們之間的關(guān)系。舉個例子:const operations = [] for (var i = 0; i < 5

我們在工作中經(jīng)常會用到JavaScript,他與我們的工作有密切的關(guān)系。但是JavaScript有一個特點(diǎn),也許會讓開發(fā)者頭痛, 是其循環(huán)和作用域相關(guān)的,那接下里就說說他們之間的關(guān)系。

舉個例子:

const operations = []
for (var i = 0; i < 5; i++) {
 operations.push(() => {
 console.log(i)
 })
}
for (const operation of operations) {
 operation()
}

它基本是循環(huán)了5次,將一個函數(shù)添加到operations數(shù)組里面。這個函數(shù)可打印出循環(huán)變量索引值i.
運(yùn)行這些函數(shù)后期望的結(jié)果應(yīng)該是:
0 1 2 3 4

但實(shí)際發(fā)生的是這樣的:

5 5 5 5 5

為什么會有這種情況? 因?yàn)槭褂玫氖莢ar.由于提升了var變量, 上面的代碼等同于

var i;
const operations = []
for (i = 0; i < 5; i++) {
 operations.push(() => {
 console.log(i)
 })
}
for (const operation of operations) {
 operation()
}

因此,在for-of循環(huán)中, i 依然是可見的, 它等于5,并且每次在函數(shù)中涉及到i ,都將使用這個值。
那么我們應(yīng)該如何做讓其變成我們想的這樣呢?
最簡單的方案是用 let 聲明. 在ES2015中介紹到, 它們有很大的幫助,能避免關(guān)于使用var聲明的一些奇怪問題。
簡單的在循環(huán)變量時(shí)將var 變成 let ,能夠很好的運(yùn)行:

const operations = []
for (let i = 0; i < 5; i++) {
 operations.push(() => {
 console.log(i)
 })
}
for (const operation of operations) {
 operation()
}

這是輸出結(jié)果:

0 1 2 3 4

這是怎么實(shí)現(xiàn)的呢?這是因?yàn)槊看窝h(huán)重復(fù)的時(shí)候,都將重新創(chuàng)造 i ,同時(shí)每個函數(shù)添加operations數(shù)組時(shí),能獲取它本身的i。
記住你不能使用 const在這種情況下, 因?yàn)檫@會導(dǎo)致for在第二次循環(huán)時(shí), 嘗試賦新值報(bào)錯。
另外一個非常普遍的解決這個問題是使用pre-ES6代碼, 同時(shí)它被稱作即時(shí)調(diào)用函數(shù)表達(dá)式 (IIFE).
在這種情況下,你可以包裝整個函數(shù),并將i 綁定在它上面。自這種方式,你正在創(chuàng)造一個能立即執(zhí)行的函數(shù),你從其返回的一個新的函數(shù)。因此我們可以稍后執(zhí)行它。

const operations = []
for (var i = 0; i < 5; i++) {
 operations.push(((j) => {
 return () => console.log(j)
 })(i))
}
for (const operation of operations) {
 operation()
}

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

解析JavaScript循環(huán)和作用域之間的關(guān)系(附代碼)

解析JavaScript循環(huán)和作用域之間的關(guān)系(附代碼):我們在工作中經(jīng)常會用到JavaScript,他與我們的工作有密切的關(guān)系。但是JavaScript有一個特點(diǎn),也許會讓開發(fā)者頭痛, 是其循環(huán)和作用域相關(guān)的,那接下里就說說他們之間的關(guān)系。舉個例子:const operations = [] for (var i = 0; i < 5
推薦度:
標(biāo)簽: js 代碼 循環(huán)
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 日韩综合在线视频 | 日本v片免费一区二区三区 欧洲精品欧美精品 | 国产综合精品久久久久成人影 | 久久久久国产精品美女毛片 | 欧美综合在线视频 | 欧美成人视屏 | 亚洲欧美视频 | 国产精品一区二区午夜嘿嘿嘿小说 | 欧美日本中文字幕 | 久久综合中文字幕一区二区 | 在线永久免费观看的毛片 | 国产精品视频免费视频 | 国内高清久久久久久久久 | 欧美色视频在线观看 | 欧美亚洲国产日韩一区二区三区 | 国产精品久久久久久免费播放 | 在线国产一区二区 | 国产一区二区成人 | 伊人伊成久久人综合网777 | 美女视频黄a视频全免费应用 | 国产精品99久久久 | 国产精品久久久久9999小说 | 亚洲专区欧美专区 | 美国一级大黄大色毛片视频一 | 久久频道毛片免费不卡片 | 自拍 欧美 在线 综合 另类 | 中文字幕一区二区三区不卡 | 成人爽a毛片在线视频 | 国产日韩中文字幕 | 国产视频资源在线观看 | 国产毛片a| 香蕉视频在线观看网站 | 国产成人综合一区精品 | 免费一看一级毛片人 | 精品欧美一区二区在线观看欧美熟 | 国内精品久久久久久久97牛牛 | 国产精品免费在线播放 | 免费在线观看一区二区 | 久久99精品一久久久久久 | 亚洲欧美在线一区 | 国产成a人片在线观看视频下载 |