- 為什么選擇前端
- 平時(shí)是怎么學(xué)習(xí)前端的
- js的函數(shù)事件綁定
只回答了addEventListener调煎,然后面試官提醒說還有onclick這種。
DOM0級(jí)事件綁定铺遂,如onclick衫哥,DOM1級(jí)事件綁定addEventListener - addEventListener中的三個(gè)參數(shù)分別代表什么意思
我就說了前兩個(gè)參數(shù),不知道第三個(gè)參數(shù)代表啥襟锐,去翻了翻才知道第三個(gè)參數(shù)false和true撤逢,分別代表冒泡時(shí)處理和捕獲時(shí)處理 - js函數(shù)中this的指向
這個(gè)回答得不是很好,特意去翻了翻總結(jié)
- 下面是對(duì)不同類型的函數(shù)調(diào)用this指向一些總結(jié):
使用new關(guān)鍵字調(diào)用:this指向由函數(shù)的內(nèi)部[[Construct]]方法創(chuàng)建的新實(shí)例對(duì)象。this(新創(chuàng)建的實(shí)例對(duì)象)通常在默認(rèn)情況下返回蚊荣,除了在函數(shù)定義中顯式指定了不同的返回值初狰。
不使用new關(guān)鍵字直接調(diào)用:在非嚴(yán)格模式下,this指向window對(duì)象(瀏覽器中)妇押。然而跷究,在嚴(yán)格模式下,this值為undefined;因此敲霍,試圖訪問或設(shè)置此屬性將引發(fā)錯(cuò)誤俊马。
間接使用綁定對(duì)象調(diào)用:Function.prototype對(duì)象提供了三種方法,可以在調(diào)用函數(shù)時(shí)將函數(shù)綁定到任意對(duì)象肩杈,即:call()柴我,apply()和bind()。 使用這些方法調(diào)用函數(shù)時(shí)扩然,this指向指定的綁定對(duì)象艘儒。作為對(duì)象方法調(diào)用:this指向調(diào)用函數(shù)(方法)的對(duì)象,無論該方法是被定義為對(duì)象的自己的屬性還是從對(duì)象的原型鏈中解析夫偶。
作為事件處理程序調(diào)用:對(duì)于用作DOM事件偵聽器的常規(guī)函數(shù)界睁,this指向觸發(fā)事件的目標(biāo)對(duì)象、DOM元素兵拢、document或window 翻斟。
- 如果有10個(gè)promise,怎么等這10個(gè)promise都執(zhí)行完后再返回結(jié)果
可以用Promise.all - 實(shí)現(xiàn)一下Promise.all
實(shí)現(xiàn)的過程磕磕絆絆说铃,因?yàn)閷?duì)于這種直接傳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個(gè)promise同時(shí)執(zhí)行,怎么辦
這個(gè)沒回答出來腻扇,但是二面的時(shí)候面試官直接給了基本代碼债热,要求實(shí)現(xiàn)只允許一個(gè)promise執(zhí)行 - flex-basis的用法
這個(gè)剛好之前看過了,所以吧啦吧啦地說完幼苛,面試官也挺滿意的窒篱。 - JWT的構(gòu)成和使用,和cookie的區(qū)別
也是看過了舶沿,但是不是特別熟悉舌剂,介紹了基本情況,面試官也沒有細(xì)問暑椰。 - xss和csrf
面試高頻問題,也是準(zhǔn)備好了回答荐绝。 - 計(jì)算數(shù)組的深度
function getDepth(arr) {}
var arr = [1, [2, [3, [4]]], [5, 6], 7, [8, 9]];
var depth = getDepth(arr);
console.log(depth); // 4
遍歷數(shù)組中的每一項(xiàng)一汽,如果這個(gè)值是數(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;
}