該篇文章為一句話的答案,想看更詳細的面試題請看這篇>《前端面試題》
原型鏈:
實例與原型的鏈條,原型是prototype,鏈是__proto__,每個函數有一個原型對象,函數在創建時有一個默認屬性 prototype,這個屬性指向函數的原型對象。
繼承:
ES6 使用extends關鍵字對Class類繼承,其余還有:構造函數、原型鏈、構造+原型鏈、原型式、寄生式、原型+寄生。
事件隊列:
分為微任務、宏任務,微任務一般比宏任務先執行,并且微任務隊列只有一個。
宏任務:setTimeout、setInterval......?
微任務:Promise、nextTick.......
事件循環
JS分為同步和異步任務。同步任務在主線程上執行,一旦執行棧中的所有同步任務執行完畢,系統就會讀取任務隊列,將可運行的異步任務添加到可執行棧中,開始執行。
防抖和節流
為了阻止操作高頻觸發,從而浪費性能。防抖執行最后一次,節流執行第一次。
防抖:搜索聯想、窗口調整;節流:鼠標連點、滾動加載。
閉包
閉包就是函數內嵌套函數,使函數外可以讀取到函數內部的變量,未釋放前變量會一直占用內存。用途:模塊化、防抖、節流、封裝函數延遲執行。
Promise
Promise
對象代表一個異步操作,異步操作的結果決定狀態,當狀態從pending
變為fulfilled或
從pending
變為rejected
,狀態就不會再改變,稱為 resolved。
async/await
async :申明方法是異步的;await:等待異步方法執行完成;返回值是 Promise 對象。
?process.nextTick()?和setImmediate()?
被設置的回調函數都是在下一次 Tick 時被調用,process.nextTick()優先級>setImmediate()
箭頭函數和普通函數的區別
箭頭函數更簡潔,沒有自己的this,this指向定義時所在作用域的this,且不會改變。
不可以當作構造函數,不可以使用new命令,不可以使用arguments,不可以使用yield命令。
變量提升
在js中,變量和函數的聲明會被提升到最頂部執行,函數內部如果用var聲明了相同名稱的外部變量,函數將不再向上尋找。
his指向
this總是指向函數的直接調用者,如果有new關鍵字,this指向new出來的對象;在事件中,this指向觸發這個事件的對象。
數組去重的方法?
ES6的Set、Array.filter() +?indexOf() 、?Array.includes()
Promise 面試題 以下代碼的執行結果是?
const promise = new Promise((resolve, reject) => {console.log(1)resolve()console.log(2)
})
promise.then(() => {console.log(3)
})
console.log(4)
答案:選中👉1,2,4,3
解釋:以上考察的是關于promise的原理,promise的構造函數是同步執行的,當new Promise的一瞬間,1,2 就立刻被執行,而 .then方法是異步執行的,當執行完1和2之后,會執行輸出4,最后執行輸出3
數組扁平化使用場景
快速獲取/過濾嵌套數組中的某個值
數組求和?
const arrSum = (arr) => {const temp = arr.reduce((pre, now) => {return pre+now},0)return temp
}
求數組的最大值/最小值?
Math.max();
Math.min();
解構賦值?
let a = 1; let b = 2;? 如果在不聲明第三個變量的前提下,使a=2, b=1?
答案:選中👉[a, b] = [b, a]
為什么要使用組件?
方便維護、方便復用、提高開發效率
在組件的設計中,需要考慮什么?
可擴展性強、功能單一、便于復用,適用程度高
前端性能優化:
大致分為兩部分:1、資源優化,通過打包配置優化資源,合理使用異步加載模塊。2、代碼優化,減少代碼冗余,使用性能更好的API,減少重繪回流。
虛擬dom為什么會快?
虛擬 dom 相當于在 js 和真實 dom 中間加了一個緩存,利用 dom diff 算法計算出差異,只更新差異點,從而提高性能。
loader 和 plugin的區別?說幾個Webpack常用 loader 和 plugin:
loader處理語法、plugin幫助資源文件打包優化
babel-loader、vue-loader、?file-loader、url-loader、eslint-loader、cache-loader、css-loader......
uglify-webpack-plugin(壓縮js)、optimize-css-assets-webpack-plugin(壓縮css)、html-webpack-plugin、webpack-bundle-analyzer(打包文件體積可視化)......