亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

以下語句(ES6)在控制臺打印出來的“i”和“timeCount”值不同,原理是什么?

以下語句(ES6)在控制臺打印出來的“i”和“timeCount”值不同,原理是什么?

長風秋雁 2019-03-27 15:14:14
代碼如下:let timeCount = 0;for (let i = 0; i < 5; i++) {  setTimeout(() => {    console.log("i..", i);    console.log("timeCount..", timeCount);  }, 1000 * timeCount);  timeCount ++;}i打印出來是從0到4,timeCount一直是5,原理是什么呢?
查看完整描述

6 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

就是一直說的閉包

i之所以沒事是因為用了let相當于


let timeCount = 0;

for (let i = 0; i < 5; i++) {

    {

        let j = i;//實際上并沒有 只是為了說明i在作用域在{}里


        setTimeout(() => {

            console.log("i..", j);

            console.log("timeCount..", timeCount);

        }, 1000 * timeCount);

        timeCount++;

    }


}

而如果你把i放到全局作用域將會都是5


let timeCount = 0;

let i = 0;

for (; i < 5; i++) {

  setTimeout(() => {

    console.log("i..", i);

    console.log("timeCount..", timeCount);

  }, 1000 * timeCount);

  timeCount ++;

}


查看完整回答
反對 回復 2019-03-30
?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

let timeCount = 0;

for (let i = 0; i < 5; i++) {

  setTimeout(() => {

**alert(2)**

    console.log("i..", i);

    console.log("timeCount..", timeCount);

  }, 1000 * timeCount);

**alert(1)**

  timeCount ++;

}


setTimeout即使時間設置為0,也是有延遲的啊,加粗的地方alert你就可以看到,會先執行setTimout的下邊,五次之后開始執行setTimeout,所以timeCount已經加到了5


查看完整回答
反對 回復 2019-03-30
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

哎……日經問題……

請自行搜索:“塊級作用域”


查看完整回答
反對 回復 2019-03-30
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

很簡單啊。

因為for循環先執行,然后再去執行異步的setTimeout。


for執行完了timeCount就是5了,再去執行setTimeout內的打印不就是5個5了!


而i是因為在循環內用了塊級變量let


for (let i = 0; i < 5; i++) {

  setTimeout(() => {

    console.log("i..", i);    // 1234

  }, 100);

}


查看完整回答
反對 回復 2019-03-30
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

1、let綁定作用域
2、你注冊了5個setTimeout,等到執行的時候timeCount已經改變了

查看完整回答
反對 回復 2019-03-30
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

js中[所有異步的]回調函數永遠在正常代碼執行完之后才執行,哪怕是settimeout延遲0毫秒也改變不了他是回調函數的本質。


查看完整回答
反對 回復 2019-03-30
  • 6 回答
  • 0 關注
  • 641 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號