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

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

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

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

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

4 回答

已采納
?
會飛的四腳蛇

TA貢獻5條經(jīng)驗 獲得超3個贊

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

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

主要有兩點要注意: 1. 作用域。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2. setTimeout的運行機制。


查看完整回答
1 反對 回復 2017-04-21
  • feno
    feno
    請問如果不使用閉包,如何達到依次輸出0 1 2 3 4 5的效果
  • 會飛的四腳蛇
    會飛的四腳蛇
    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); 這一行代碼報錯了,WAService.js:5 Uncaught TypeError: setTimetout expects a function as first argument but got .(…);閉包的意義在于保存了循環(huán)中臨時產(chǎn)生的i的數(shù)值
點擊展開后面3
?
高jay

TA貢獻96條經(jīng)驗 獲得超122個贊

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

TA貢獻19條經(jīng)驗 獲得超17個贊



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

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

關于執(zhí)行上下文

1.只有唯一的一個全局上下文window

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

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


查看完整回答
反對 回復 2017-04-23
?
ruibin

TA貢獻358條經(jīng)驗 獲得超213個贊

這個是閉包問題。你理解錯了,這樣寫就好了


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

查看完整回答
反對 回復 2017-04-20
  • 4 回答
  • 1 關注
  • 2598 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號