1. 程式人生 > >for 迴圈中setTimeout(function () { console.log(i)},100)中的非同步問題

for 迴圈中setTimeout(function () { console.log(i)},100)中的非同步問題

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

上述程式碼執行完後,列印3次3,這是setTimeout是非同步執行的,會排在任務佇列中,只有主線上的全部執行完,才會執行任務佇列裡的任務,當主線執行完成後,i=3,所以列印3次3

那麼怎麼樣列印0,1,2呢?兩種方法:

1.使用let來定義i,i成為塊級變數,繫結到迴圈體的每一次迭代中

for (let i = 0; i < 3; i++) { setTimeout
(function () { console.log(i); },100) }

2.把setTimeout放到一個自執行的函式中去執行,將i作為引數傳進去

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

相關推薦

for 迴圈setTimeout(function () { console.log(i)},100)的非同步問題

for (var i =0; i <3; i++) { setTimeout(function () { console.log(i); },100) }上述程式碼執行完後,列印3次

for迴圈第三個條件i++和++i有區別嗎?

看了jdk1.8原始碼裡面寫了個for迴圈,但是我看到第三個條件竟然是++i,這個和我們平時寫的for迴圈不一樣啊。我們用的時候都是i++,不是++i,難道有什麼高明的地方?好奇之下,就做了簡單的測試

for 迴圈setTimeout(function(){})非同步問題

閱讀這段程式碼 for (let i = 1; i <= 5; i++) { setTimeout(function timer() { console.log(i); }, i*1000) } 預期

JS獲取for迴圈i的實時值

最近在完成燈箱效果時,需要獲取for迴圈中i的實時值來定位大圖輪播的索引,但最初獲得的是i的最大值 幾種獲取for迴圈中i的實時值方法: 自調: for (var i = 0; i < itemli.length; i++) { (function (arg) {

【轉載】 for迴圈i++與++i的效率探究

原文連結:https://blog.csdn.net/zy1691/article/details/4849808?utm_source=blogxgwz1 for(int i=0;i<=50;i++)   我們經常會使用這樣的程式碼來做迴圈,一般在for迴圈中習慣於

Linux gcc for 迴圈 i=i++ 會造成死迴圈問題及 ++i / i++ 彙編分析

在把 Windows 程式移植到 Linux 時遇到了死迴圈,最後定位到了類似這種的語句 for (i = 0; i < 1; i = i++), 別問我是誰寫的,為什麼這麼寫(淚目!)。 根據我自己的感覺, i = i++ 應該等價於 i++(C標準中 i=i++ 的行為未

jsfor迴圈內的匿名函式使用i的問題及解決方案

問題描述 js中由於作用域鏈及js執行機制導致的for迴圈中匿名函式使用i的問題 <!--現有html結構程式碼如下--> <ul> <li>VueJs</li> <li>AngularJs<

關於for迴圈的變數int i 如果跳出了這個for迴圈後,i的值是繼續保留還是被釋放掉了

#include<iostream>using namespace std; int main(){    char a[10];        //定義一個一維陣列用來存放字串    int i,j;                //定義變數    cout&

關於for迴圈引用setTimeout

題目1: var a=[1,2,3]; var len=a.length; for(___){ setTimeout{function(){ console.log(__); },0} } 要求輸出a的所有項。 該題目考察的就是Ja

除錯技巧:讓斷點停在for迴圈i為某個值得時候

即:除錯for迴圈:比如for迴圈 for (int i = 0; i < 10; i++) { // 一堆程式碼 //... }

關於for迴圈使用setTimeout要注意的幾點

首先了解setTimeout延時器的執行機制 setTimeout(fun,time); 定時器會先將fun函式放到佇列中,等待區域內其他主程式執行完畢後按時間先後順序執行fun函式 因此若是這樣使用將不會得到想要的結果在控制檯上輸出1.2.3.4.5

for迴圈的++ii++(摘抄總結)

摘要:for迴圈中使用++i和i++的區別 我們都知道,在for迴圈中,使用++i有更好的效能。原因是++i返回的是i+1後的本身值,而i++返回的是i+1之前的臨時變數,後者要有臨時變數的操作,所以前者效率更高。它們的實現如下: // 字首形式: int&

關於JavaScript閉包for迴圈執行順序(this和trs[i]問題)

.over{ Background:red; } .out{ Background:white; } var trs=document.getElementsByTagName("tr"); for(var i=0;i<trs.length;i+

javascript解決for迴圈i取值的問題

最近在做專案時遇到呼叫for迴圈中i取值問題,主要程式碼如下: function delete__listen() { var detNum=document.getElementsByTagName('li'); for(var i =

for迴圈i++與++i

文章作者:Slyar 文章來源:Slyar Home (www.slyar.com) 轉載請註明,謝謝合作。 今天有同學問C語言中for迴圈裡那個 i++ 和 ++i 是否有區別,我告訴他在for迴圈中是沒有區別的,現在具體說一下 i++ 和 ++i 的區別。 我們先用while語句寫一下 for(i=1;i

jsrender在for迴圈獲取上級資料

使用~root可以在模板中訪問到頂層資料,從頂層資料往下就可以訪問到所有資料了,如下: <script id="item-list" type="text/x-jsrender"> {{for items}} {{if ~root.type == "pi

javascript瀏覽器控制檯console.log 輸出圖片,彩色字型,文字

瀏覽器控制檯輸出圖片,彩色字型,文字 if (window.console) { var cons = console; if (cons) { cons.log("%c\n ", "font-size:41px;background:url('htt

JS基礎 關於閉包在for迴圈的使用

主要是針對ES5的語法,因為ES6中有塊級作用域了(儘管我不知道為什麼我還一直在用es5的語法) 先展示一段問題程式碼 1 for (var i = 0; i < data.length; i++) { 2 var $btn=$('#iBtn'); 3 $btn.on('c

RETURN的用法是什麼?若用在FOR迴圈,還會執行下一次迴圈嗎?

這裡是修真院前端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】 八個方面深度解析前端知識/技能,本篇分享的是: 【return的用法是什麼?若在for迴圈中,還會執行下一次迴圈嗎?】 【修真院web小課堂

for迴圈刪除,資料不正確

背景:在寫業務程式碼的時候,需要篩選list中符合條件的物件 ,for迴圈不能奏效,當時的處理方法是,將刪除的index存放在陣列中,然後再倒序刪除原list中的資料。現在來試一下各種方法迴圈刪除的功能。 List<Map<String,Object>