亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

for循環 + setTimeout 結合一些示例(前端面試題)

2019-11-19 15:36:26
字體:
來源:轉載
供稿:網友

一、背景

最近在翻看以前的老書《node.js開發指南》,恰好碰到 for 循環 + setTimeout 的經典例子,于是重新梳理了思路并記錄下。

二、寫在前面,setTimeout 和 setInterval 的執行機制

在日常編碼中,你會發現,給 setTimeout 和 setInterval 設定延遲時間往往并不準,或者干脆 setTimeout(function(){xxx},0) 也不是立馬執行(特別是有耗時代碼在前),這是因為 js 是單線程的,有一個事件隊列機制,setTimeout 和 setInterval 的回調會到了延遲時間塞入事件隊列中,排隊執行。

setTimeout :延時 delay 毫秒之后,啥也不管,直接將回調函數加入事件隊列。

setInterval :延時 delay 毫秒之后,先看看事件隊列中是否存在還沒有執行的回調函數( setInterval 的回調函數),如果存在,就不要再往事件隊列里加入回調函數了。

看下面示例:

for (var i = 0; i < 5; i++) {  setTimeout(function() {    console.log(i);  }, 1000);}

結果:1 秒之后,同時輸出 5 個 5。

因為 for 循環會先執行完(同步優先于異步優先于回調),這時五個 setTimeout 的回調全部塞入了事件隊列中,然后 1 秒后一起執行了。

三、正文

接下來就是那道經典的代碼:

for (var i = 0; i < 5; i++) {   setTimeout(function (){    console.log(i);    },1000); }

結果:5 5 5 5 5

為什么不是 1 2 3 4 5,問題出在作用域上。

因為 setTimeout 的 console.log(i); 的i是 var 定義的,所以是函數級的作用域,不屬于 for 循環體,屬于 global。等到 for 循環結束,i 已經等于 5 了,這個時候再執行 setTimeout 的五個回調函數(參考上面對事件機制的闡述),里面的 console.log(i); 的 i 去向上找作用域,只能找到 global下 的 i,即 5。所以輸出都是 5。

解決辦法:人為給 console.log(i); 創造作用域,保存i的值。

解決辦法一

for (var i = 0; i < 5; i++) {   (function(i){   //立刻執行函數    setTimeout(function (){      console.log(i);      },1000);   })(i); }

這里用到立刻執行函數。這樣 console.log(i); 中的i就保存在每一次循環生成的立刻執行函數中的作用域里了。

解決辦法二

for (let i = 0; i < 5; i++) {   //let 代替 var  setTimeout(function (){    console.log(i);    },1000); }

let 為代碼塊的作用域,所以每一次 for 循環,console.log(i); 都引用到 for 代碼塊作用域下的i,因為這樣被引用,所以 for 循環結束后,這些作用域在 setTimeout 未執行前都不會被釋放。

四、補充

在寫示例代碼的過程中,發現一個語法點:

 function a(i){   console.log(i);   }for (var i = 0; i < 5; i++) {   setTimeout(a(i),1000); } 

報錯:

TypeError: "callback" argument must be a functionat setTimeout (timers.js:421:11)……

百度了下,原來 setTimeout 不支持傳帶參數的函數,可以再用一個匿名函數包裝下它吧,見下面代碼:

function a(i){   console.log(i);  }for (var i = 0; i < 5; i++) {   setTimeout(function(){ //用匿名函數包裝    a(i);  },1000); } 

總結

以上所述是小編給大家介紹的for循環 + setTimeout 結合一些示例(前端面試題),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97超碰国产精品女人人人爽| 欧美日本亚洲视频| 国产专区欧美专区| 亚洲第一男人天堂| 欧美成人免费在线观看| 伊人久久大香线蕉av一区二区| 久久视频这里只有精品| 91久久在线观看| 久热精品视频在线免费观看| 欧美丝袜美女中出在线| 亚洲精品免费一区二区三区| 久久香蕉国产线看观看网| 欧美另类高清videos| 亚洲国产日韩欧美综合久久| 成人美女免费网站视频| 浅井舞香一区二区| 亚洲图片制服诱惑| 欧美大尺度激情区在线播放| 亚洲变态欧美另类捆绑| 国产精品极品尤物在线观看| 欧美精品999| 国产精品午夜一区二区欲梦| 91网站在线免费观看| 国产精品高潮呻吟久久av无限| 精品久久久久久久大神国产| 欧美国产日韩一区| 色哟哟网站入口亚洲精品| 在线亚洲男人天堂| 亚洲国产成人久久综合| 欧美性高潮床叫视频| 国产精品视频999| 欧美一区二区三区……| 亚洲精选一区二区| 久久精品亚洲精品| 久久天天躁狠狠躁夜夜躁| 亚洲免费视频一区二区| 欧美日韩在线第一页| 国产精品久久久久国产a级| 青青青国产精品一区二区| 久久99久久久久久久噜噜| 欧美视频免费在线观看| 欧美亚洲国产视频小说| 清纯唯美亚洲综合| 久久手机精品视频| 青草热久免费精品视频| 日韩电影大全免费观看2023年上| 国产成人精品网站| 亚洲最大成人免费视频| 国产精品久久激情| 色先锋资源久久综合5566| 日韩中文理论片| 久久久亚洲精选| 国产精品678| 夜夜狂射影院欧美极品| 精品国产一区二区三区久久| 日韩亚洲欧美中文高清在线| 久久久久这里只有精品| 久久精品亚洲精品| 成人国产精品免费视频| 久久精品国产久精国产一老狼| 日韩亚洲精品视频| 国产一区二区三区视频在线观看| 欧美午夜精品久久久久久久| 亚洲激情小视频| 亚洲国产精品yw在线观看| 日韩风俗一区 二区| 国模精品系列视频| 久久久国产在线视频| 在线成人免费网站| 日韩av免费在线看| 国产福利视频一区| 18性欧美xxxⅹ性满足| 欧美日韩成人在线视频| 日本最新高清不卡中文字幕| 日韩欧美视频一区二区三区| 欧美精品videossex88| 97久久久免费福利网址| 欧美电影免费看| 国产国语刺激对白av不卡| 91av视频在线免费观看| 日本久久久久久久久久久| 成人精品视频久久久久| 九九久久久久久久久激情| 亚州精品天堂中文字幕| 国产精品久久久久久久久久免费| 亚洲精品视频在线观看视频| 91高清免费在线观看| 国产精品久久久久久超碰| 久久夜色精品国产欧美乱| 欧美精品中文字幕一区| 亚洲第一天堂av| 欧美福利在线观看| 亚洲第一精品夜夜躁人人躁| 97精品在线观看| 欧美极品少妇xxxxⅹ喷水| 91香蕉电影院| 欧美性xxxxx极品娇小| 欧美日韩中文字幕| 狠狠色狠狠色综合日日小说| 午夜精品久久久久久久白皮肤| 国产精品久久久久久久久久99| 日韩精品黄色网| 久久综合伊人77777蜜臀| 久久人人爽人人爽人人片av高请| 2020久久国产精品| 亚洲精品永久免费精品| 欧美激情中文字幕在线| 中文字幕视频在线免费欧美日韩综合在线看| 欧美色视频日本高清在线观看| 日韩在线激情视频| 国产精品91免费在线| 午夜剧场成人观在线视频免费观看| 欧美激情xxxxx| 国产精品三级在线| 日本久久久久亚洲中字幕| 国外成人性视频| 亚洲а∨天堂久久精品喷水| 精品偷拍各种wc美女嘘嘘| 久久综合九色九九| 2019中文字幕在线免费观看| 国产欧美精品在线播放| 国产91精品久久久| 欧美日韩午夜视频在线观看| 欧美精品videossex88| 日韩av免费在线看| 一区二区三区无码高清视频| 国产精品成人久久久久| 亚洲免费人成在线视频观看| 日韩国产一区三区| 国产成人精品av在线| 性欧美激情精品| 久久综合免费视频影院| 日日骚久久av| 久久九九全国免费精品观看| 日本一区二区在线免费播放| 中文字幕在线成人| www.日韩欧美| 成人日韩在线电影| 国产成人亚洲精品| 国内外成人免费激情在线视频| 国产中文欧美精品| 亚洲国内精品在线| 日韩av网站电影| 亚洲成人精品视频在线观看| 亚洲第一精品夜夜躁人人躁| 久久久999精品| 国产精品草莓在线免费观看| 美女性感视频久久久| 亚洲精品一区在线观看香蕉| 精品久久久中文| 欧美日韩精品二区| 亚洲精品欧美日韩专区| 九九热精品视频国产| 欧美野外猛男的大粗鳮| 26uuu亚洲伊人春色| 日本精品va在线观看| 国产欧美一区二区白浆黑人| 国产精品久久久久国产a级| 日韩午夜在线视频| 亚洲精品在线看| 亚洲黄色免费三级| 日韩精品免费电影| 欧美最顶级丰满的aⅴ艳星| 欧美日韩一区二区在线|