for
(let i=
0;i<
2;i++),
100);}
for(
var i=
0;i<
2;i++),
100);}
結果:012
2
①js是單執行緒的,settimeout是非同步巨集任務,所以**執行遇到非同步的,就放在事件佇列中的,等執行緒中的任務執行完後才會執行事件佇列中的任務。
② let是es6中宣告變數的方式,有自己的作用域塊,可以放變數,所以let繫結for迴圈時,每個i都有自己的值. 在這個for迴圈中就是滿足一次條件向事件佇列中新增乙個列印i的事件,且每個事件中的i有自己的值.
③var沒有作用域塊,for迴圈的變數就會後乙個覆蓋前乙個,當迴圈完畢時i就只有乙個值,又因為for迴圈的判斷條件是不滿足跳出,所以i最後是2而不是1 。
第乙個:let將i繫結到for迴圈快中,事實上它將其重新繫結到迴圈體的每一次迭代中,確保上一次迭代結束的值重新被賦值。settimeout裡面的function()屬於乙個新的域,通過 var 定義的變數是無法傳入到這個函式執行域中的,通過使用 let 來宣告塊變數,這時候變數就能作用於這個塊,所以 function就能使用 i 這個變數了;輸出為0,1.
第二個:settimeout是非同步執行,1s後往非同步任務佇列裡面新增乙個任務,只有同步的全部執行完,才會執行非同步任務佇列裡的任務,當主線執行完成後,i是2,所以此時再去執行任務佇列裡的任務時,所以輸出兩次2.
牛客 題庫 1
1.字串複製函式strcpy 字元陣列1,字元陣列2 字元陣列1的長度應大於等於字元陣列2的長度.說法是否正確?解答 說法正確 strcpy函式 顧名思義字串複製函式 原型宣告 char strcpy char dest,const char src 標頭檔案 include string.h 和 ...
牛客 題庫 遞迴
1.下列 的輸出是?注 print已經宣告過 main print char s 解答 輸出的是 suiene 注意,字母前面有乙個空格 這裡考察了兩個知識點 遞迴和print s 指標先移動,然後呼叫函式。找到一篇講解遞迴的部落格 遞迴演算法 程式呼叫自身的程式設計技巧稱為遞迴 recursion...
牛客 題庫 define typedef 區別
1.test.c檔案中包括如下語句 define int ptr int typedef int int ptr int ptr a,b int ptr c,d 檔案中定義的四個變數,哪個變數不是指標型別?解答 b typedef 給已有型別宣告乙個別名,故c和d都是int ptr型別也即都是int...