練習題 可以很好地詮釋js的執行機制

2022-07-09 19:09:15 字數 1603 閱讀 5710

先看一下題:

現有如下html結構

1

<

ul>

2<

li>

li>

3<

li>

li>

4<

li>

li>

5<

li>

li>6ul

>

執行如下**:

1

var elements = document.getelementsbytagname('li');

2var length =elements.length;

3for(var i=0;i)

7 }

依次點選四個li標籤,下列選項哪個正確?

a、1234        b、0123       c、3333      d、4444

這個是選擇d的,以下是解釋:

這裡考的是js的執行機制! 事件(click,focus等等),定時器(settimeout和setinterval),ajax,都會觸發非同步,屬於非同步任務;而js是單執行緒的,乙個時間點只能做一件事,所以優先處理同步任務,按照**從上往下執行,遇到非同步,就掛起,放到非同步任務裡,繼續執行同步任務,只有同步任務執行完了,才去看看有沒有非同步任務,然後再按照順序執行! 這裡for迴圈是同步任務,onclick是非同步任務,所以等for迴圈執行完了,此時i變成4,注意:這裡因為i是全域性變數,最後乙個i++,使得i為4(後面的onclick函式,最後在迴圈外面執行,不受i有以下幾個解決方法:(輸出結果都是   0  1   2   3)

1、利用塊級作用域

1

var elements = document.getelementsbytagname('li');

2var length =elements.length;

3for(let i=0;i)

7 }

2、利用自執行函式,將i作為引數傳入

1

var elements = document.getelementsbytagname('li');

2var length =elements.length;

3for(var i=0;i)

7

})(i)

8 }

3、利用promise

1

var elements = document.getelementsbytagname('li');

2var length =elements.length;

3for(var i=0;i)

9})

10 }

4、利用async函式

1

var elements = document.getelementsbytagname('li');

2var length =elements.length;

3 async function

foo()

10});

11console.log(result)12}

13}14 foo();

js陣列的幾個練習題

第一次在寫文章,之前一直自己做記錄。現在前端工作兩年了,對前端整體技術有較清晰的了解。專案用了vue,react之類的寫,如今打算從基礎開始,慢慢深入了解原生的js.這幾天清明節,玩的嗨皮,最後一次開始趕作業 我規定自己每天至少乙個js題,在網上隨機找的。今天主要是重寫了陣列的remove conc...

JS 字串的練習題

總結 對字串進行某些操作比較麻煩時,可以把字串轉換成陣列 利用陣列的方法處理可能會比較簡單,最後再把陣列轉換成字串即可。即學會靈活轉換字串和陣列,使問題簡單化。字串的值不能改變,陣列的值可以改變。但求字串中個數最多的字元時,先對字串去重,然後再比較去重的和沒去重的求出最大個數。判斷某個物件是不是陣列...

Python檔案的操作練習題,感興趣的可以操作一下

import os import time defread name input 請輸入要處理的檔名 if os.path.exists name with open name,r encoding utf 8 as f print f.read else print 這個檔案不存在,請確認後輸入!...