以下是剩余題目的詳細解答,結合前端知識體系和實際應用場景展開:
91. JS 放在 head 里和放在 body 里有什么區別?
對比維度 | 放在 <head> | 放在 <body> |
---|---|---|
加載阻塞性 | 會阻塞頁面渲染,需等待 JS 下載/執行完成后,才繼續渲染頁面 | 一般放在 </body> 前,頁面渲染完成后再執行 JS,不阻塞渲染 |
DOM 可訪問性 | 執行時可能 DOM 未加載(如操作 document.getElementById 會返回 null ) | DOM 已渲染完成,可直接訪問/操作元素 |
應用場景 | 需優先執行的代碼(如關鍵依賴、統計腳本),但需配合 defer /async 避免阻塞 | 常規業務邏輯(如事件綁定、交互邏輯),保證 DOM 可用 |
示例 | <head><script src="app.js"></script></head> (需額外處理阻塞問題) | <body>...<script src="app.js"></script></body> (推薦寫法) |
92. Eslint 代碼檢查的過程是啥?【必會】
Eslint 代碼檢查流程分 靜態分析 和 規則校驗 兩大階段,核心步驟:
- 解析代碼:
- 將 JS 代碼通過 Espree(Eslint 內置解析器 )轉換為抽象語法樹(AST ),識別代碼結構(如變量聲明、函數調用 )。
- 遍歷 AST:
- Eslint 遍歷 AST 節點,觸發 規則監聽函數(如檢測
console.log
的規則會監聽MemberExpression
節點 )。
- Eslint 遍歷 AST 節點,觸發 規則監聽函數(如檢測
- 應用規則:
- 對每個節點,根據配置的規則(如
no-console
禁止console
)判斷是否違規,違規則標記錯誤。
- 對每個節點,根據配置的規則(如
- 輸出結果:
- 將違規信息格式化輸出(命令行、編輯器提示 ),支持自動修復(
--fix
)時修改代碼 AST 并生成修復后的代碼。
- 將違規信息格式化輸出(命令行、編輯器提示 ),支持自動修復(
93. 虛擬滾動加載原理是什么,用代碼簡單實現一個虛擬滾動加載
原理:
虛擬滾動通過 只渲染可視區域內的 DOM ,而非全部列表,降低渲染壓力。核心邏輯:
- 計算列表總高度并占位(用容器
padding
模擬 )。 - 監聽滾動事件,動態計算 可視區域應渲染的起始/結束索引。
- 僅渲染可視區域的列表項,配合數據緩存實現滾動加載。
簡易實現(Vue 示例,React/原生同理 ):
<div class="virtual - list" @scroll="handleScroll"><!-- 占位容器,模擬總高度 --><div class="placeholder" :style="{ height: totalHeight + 'px' }"></div><!-- 實際渲染的列表 --><div class="visible - list"</