先看一下題:
現有如下html結構
1<
ul>
2<
li>
li>
3<
li>
li>
4<
li>
li>
5<
li>
li>6ul
>
執行如下**:
1var 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、利用塊級作用域
1var elements = document.getelementsbytagname('li');
2var length =elements.length;
3for(let i=0;i)
7 }
2、利用自執行函式,將i作為引數傳入
1var elements = document.getelementsbytagname('li');
2var length =elements.length;
3for(var i=0;i)
7})(i)
8 }
3、利用promise
1var elements = document.getelementsbytagname('li');
2var length =elements.length;
3for(var i=0;i)
9})
10 }
4、利用async函式
1var 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 這個檔案不存在,請確認後輸入!...