1.在移動端中,直接使用focus是的input獲取焦點會有問題,建議使用autofocus+click事件,另外iOS中非同步事件中使用click或者focus完全無效
2.防止頁面被鍵盤擠壓,提前將頁面高度設死
3.閉包三種解決方案
//利用setTimeout的第三個引數
for(var i = 0; i <= 5; i++){
setTimeout(function timer(j){
console.log(j)
}, 1000, i)
}
//普通閉包
for(var i = 0; i <= 5; i++){
(function(j){
setTimeout(function timer(){
console.log(j)
}, 1000)
}(i))
}
//利用let定義變數
for(let i = 0; i <= 5; i++){
setTimeout(function timer(){
console.log(i)
}, 1000)
}複製程式碼
4.操作元素的class
(1)可以直接使用dom.className來獲取該元素的class,得到的是個字串,你可以對這個字串進行拼接。
<div class="a b"></div>
div.className => "a b"
div.className+=" c"//新增類c,注意這裡開頭有空格,不然會變成<div class="a bc"></div>複製程式碼
(2)使用classList屬性
如圖,dom.classList得到的是個DOMTokenList物件,類似陣列但不是陣列。他有如下方法
具有物件的方法(keys),並且是個可迭代物件(forEach, entries)。
新增add,刪除remove,查詢contains,等等
5.base的使用
base64弊端
根據 base64 的編碼原理,大小比原檔案大小大 1/3儘管圖片請求少了,但是 HTML 檔案本身尺寸會變大,會影響首屏載入,所以要權衡程式碼看起來會有點醜,大量編碼字元(當然也可以通過構建工具動態插入)base64 無法快取,要快取只能快取包含 base64 的檔案,比如 HTML 或者 CSS,這相比直接快取圖片要弱很多,一般 HTM 會改動頻繁,所以等同於得不到快取效益
優勢
減少 HTTP 請求,適合小尺寸的圖片。
6.判斷一個函式是否為async函式
Object.prototype.toString.call(fn);如果輸出"[object AsyncFunction]"那就是async函式,否則是普通函式
7.關於setTimeout非同步理解
setTimeout是把要執行的內容延遲執行,js是單執行緒,所以它在執行的過程中,如果有非同步操作那麼就會把這個操作放到一個事件佇列中,不會去等待,而它自己就不斷的進行事件迴圈,等到非同步完成了,就會執行非同步中的內容,當然到底是不是在下一次eventloop中就不好說了,但是一般來說js執行都很快的。在node中setTimeout設定時間為0,其實內部回設定為1。