settimeout,最後輸出什麼
settimeout是非同步執行,要等待主線上的for迴圈完畢之後執行。每次for迴圈,都會將乙個console.log(i)放入任務佇列但不執行,當for迴圈結束(此時i=5),主線程任務空了開始執行任務佇列中的5個console.log(i),此時i=5,所以輸出5個5.
1.單執行緒:所有任務需要排隊,前乙個任務結束,才會執行後乙個任務;
2.同步任務與非同步任務:同步任務指的是,在主線程上排隊執行的任務,只有前乙個任務執行完畢,才能執行後乙個任務;非同步任務指的是,不進入主線程、而進入"任務佇列"(task queue)的任務,只有"任務佇列"通知主線程,某個非同步任務可以執行了,該任務才會進入主線程執行。
3.在所有同步任務執行完之前,任何的非同步任務是不會執行的。
4.非同步執行事件:
settimeout、setlnterval、dom事件、es6中的promise、ajax非同步請求
1. 使用es6中的let宣告變數
for( let i = 0;i<5;i++) ,1000)
}
2. 使用閉包
閉包的概念:閉包可以使乙個函式中的變數可以被其他函式所訪問
for (var i = 0; i < 5; i++) )(i), 1000);
}
如果要實現每隔一秒輸出乙個數字的效果可以在最後讓i*1000就可以了。
3. 使用立即執行函式,【立即執行函式模式是一種語法,可以讓你的函式在定義後立即被執行】
for( var i = 0;i<5;i++) ,1000)
})(i)
}
立即函式中不傳遞引數的話,結果還是5個5;立即函式不適宜傳遞太多引數;載入完成後只執行一次的設定函式,函式中的變數包裹在區域性作用域中,不會洩露成全域性變數。 2018前段面試題
一.什麼是閉包?乙個函式能夠訪問其函式外部作用域中的變數。閉包三大特點 1.函式的巢狀 2.內部函式可以訪問外部函式的變數 3.引數和變數不會被 二.css引入方式有哪些?link和 import區別是?1.css的引入方式有三種 行內樣式,內部樣式表,外部樣式表 2.鏈結式和匯入式的區別 1 屬於...
前段面試題題目
題目1 a在什麼條件下成立 var a if a 1 a 2 a 3 方法1 使用tostring var a if a 1 a 2 a 3 方法2 資料劫持實現 var i 0 object.defineproperty window,a if a 1 a 2 a 3 方法3 var a 1 2,...
經典面試題
1.以下三條輸出語句分別輸出什麼?char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 str2 ...