- 為什么選擇前端
- 平時是怎么學(xué)習(xí)前端的
- js的函數(shù)事件綁定
只回答了addEventListener,然后面試官提醒說還有onclick這種。
DOM0級事件綁定,如onclick,DOM1級事件綁定addEventListener - addEventListener中的三個參數(shù)分別代表什么意思
我就說了前兩個參數(shù),不知道第三個參數(shù)代表啥,去翻了翻才知道第三個參數(shù)false和true,分別代表冒泡時處理和捕獲時處理 - js函數(shù)中this的指向
這個回答得不是很好,特意去翻了翻總結(jié)
- 下面是對不同類型的函數(shù)調(diào)用this指向一些總結(jié):
使用new關(guān)鍵字調(diào)用:this指向由函數(shù)的內(nèi)部[[Construct]]方法創(chuàng)建的新實例對象。this(新創(chuàng)建的實例對象)通常在默認(rèn)情況下返回,除了在函數(shù)定義中顯式指定了不同的返回值。
不使用new關(guān)鍵字直接調(diào)用:在非嚴(yán)格模式下,this指向window對象(瀏覽器中)。然而,在嚴(yán)格模式下,this值為undefined;因此,試圖訪問或設(shè)置此屬性將引發(fā)錯誤。
間接使用綁定對象調(diào)用:Function.prototype對象提供了三種方法,可以在調(diào)用函數(shù)時將函數(shù)綁定到任意對象,即:call(),apply()和bind()。 使用這些方法調(diào)用函數(shù)時,this指向指定的綁定對象。作為對象方法調(diào)用:this指向調(diào)用函數(shù)(方法)的對象,無論該方法是被定義為對象的自己的屬性還是從對象的原型鏈中解析。
作為事件處理程序調(diào)用:對于用作DOM事件偵聽器的常規(guī)函數(shù),this指向觸發(fā)事件的目標(biāo)對象、DOM元素、document或window 。
- 如果有10個promise,怎么等這10個promise都執(zhí)行完后再返回結(jié)果
可以用Promise.all - 實現(xiàn)一下Promise.all
實現(xiàn)的過程磕磕絆絆,因為對于這種直接傳promise的我之前沒有碰過,不清楚到底傳進(jìn)來的是什么
function allPromises(promises){
let len = promises.length();
let res = [];
let flag = true;
promises.forEach((promise) => {
promise.then((r) => {
res.push(r);
if(res.length == len) return res;
});
})
}
- 如果進(jìn)程中只允許3個promise同時執(zhí)行,怎么辦
這個沒回答出來,但是二面的時候面試官直接給了基本代碼,要求實現(xiàn)只允許一個promise執(zhí)行 - flex-basis的用法
這個剛好之前看過了,所以吧啦吧啦地說完,面試官也挺滿意的。 - JWT的構(gòu)成和使用,和cookie的區(qū)別
也是看過了,但是不是特別熟悉,介紹了基本情況,面試官也沒有細(xì)問。 - xss和csrf
面試高頻問題,也是準(zhǔn)備好了回答。 - 計算數(shù)組的深度
function getDepth(arr) {}
var arr = [1, [2, [3, [4]]], [5, 6], 7, [8, 9]];
var depth = getDepth(arr);
console.log(depth); // 4
遍歷數(shù)組中的每一項,如果這個值是數(shù)組類型,那么遞歸調(diào)用getDepth,并將返回的值加1與最大深度做比較,如果大于最大深度,那么把它賦值給最大深度。
function getDepth(arr) {
if(arr instanceof Array !== true) return 0;
let maxDepth = 1;
for(let i=0; i<arr.length;i++){
if(arr[i] instanceof Array){
if(getDepth(arr[i])+1 > maxDepth) maxDepth = getDepth(arr[i])+1;
}
}
return maxDepth;
}