牛客題庫 01 非同步執行緒 let var作用域

2021-10-22 12:54:11 字數 750 閱讀 1048

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...