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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

js執(zhí)行上下文和任務(wù)隊(duì)列問題

js執(zhí)行上下文和任務(wù)隊(duì)列問題

慕粉1469491289 2017-04-20 17:04:07
為什么打印出來的結(jié)果是這樣的,最近在看執(zhí)行上下文----棧------任務(wù)隊(duì)列,一臉懵逼啊
查看完整描述

4 回答

已采納
?
會(huì)飛的四腳蛇

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

http://img1.sycdn.imooc.com//58f993260001830d07260460.jpg

如果想要依次次輸出,0,1,2,3,4,5,用不用閉包都可以實(shí)現(xiàn)。

主要有兩點(diǎn)要注意: 1. 作用域。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2. setTimeout的運(yùn)行機(jī)制。


查看完整回答
1 反對(duì) 回復(fù) 2017-04-21
  • feno
    feno
    請(qǐng)問如果不使用閉包,如何達(dá)到依次輸出0 1 2 3 4 5的效果
  • 會(huì)飛的四腳蛇
    會(huì)飛的四腳蛇
    for(var i=0;i<=5;i++){ setTimeout((function () { console.log(i); })(i),i*1000); //這樣寫沒什么意義,不是閉包.外層自執(zhí)行函數(shù)去掉,直接console.log(i)也可以 } var timer =setTimeout(function () { console.log("1秒打印出來"); },0); console.log("other action"); 依次輸出:0,1,2,3,4,5,other action,1秒打印出來;
  • feno
    feno
    setTimeout((function () { console.log(i); })(i),i*1000); 這一行代碼報(bào)錯(cuò)了,WAService.js:5 Uncaught TypeError: setTimetout expects a function as first argument but got .(…);閉包的意義在于保存了循環(huán)中臨時(shí)產(chǎn)生的i的數(shù)值
點(diǎn)擊展開后面3
?
高jay

TA貢獻(xiàn)96條經(jīng)驗(yàn) 獲得超122個(gè)贊

這是作用域問題,js沒有塊級(jí)作用域。i是全全局變量他在循環(huán)完成后就是最后一次的值。
查看完整回答
1 反對(duì) 回復(fù) 2017-04-20
?
winner4265975

TA貢獻(xiàn)19條經(jīng)驗(yàn) 獲得超17個(gè)贊



關(guān)鍵問題是js引擎是單線程的,所以所以并不存在真正意義上的異步,它所謂的異步就是不同步。setTimeout是js的異步表現(xiàn)之一,js所有異步都會(huì)入隊(duì)。任務(wù)隊(duì)列只有在主線程執(zhí)行完了才會(huì)去執(zhí)行任務(wù)隊(duì)列,所以你這個(gè)先輸出主線程‘other actions’,再輸出i==0時(shí)的那個(gè)6,然后輸出‘1秒后打印出來’(這可不是1秒而是你主程結(jié)束處理完隊(duì)列中排在他前面的任務(wù)后立馬打印所以時(shí)間不確定例如你other actions底下寫一個(gè)死循環(huán)那個(gè)6和它就永遠(yuǎn)不會(huì)打?。詈竺扛?s輸出那5個(gè)6,如果你把i*1000改為0就是同時(shí)輸出那6個(gè)6然后輸出‘1秒后打印出來’這是因?yàn)殛?duì)列和棧不一樣它是先進(jìn)先出。

棧是一種數(shù)據(jù)結(jié)構(gòu)表現(xiàn)為后進(jìn)先出!

關(guān)于執(zhí)行上下文

1.只有唯一的一個(gè)全局上下文window

2.函數(shù)的執(zhí)行上下文的個(gè)數(shù)沒有限制

3.每次某個(gè)函數(shù)被調(diào)用,就會(huì)有個(gè)新的執(zhí)行上下文為其創(chuàng)建,即使是調(diào)用的自身函數(shù),也是如此。


查看完整回答
反對(duì) 回復(fù) 2017-04-23
?
ruibin

TA貢獻(xiàn)358條經(jīng)驗(yàn) 獲得超213個(gè)贊

這個(gè)是閉包問題。你理解錯(cuò)了,這樣寫就好了


for (var i = 0; i < 4; i ++) {
? ?setTimeout((function(i) {
? ? ? ?return function() {
? ? ? ? ? ?console.log(i);
? ? ? ?}
? ?})(i), i * 1000)
}

查看完整回答
反對(duì) 回復(fù) 2017-04-20
  • 4 回答
  • 1 關(guān)注
  • 2643 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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