2024-05-24 Interview
這次面試,面試官問了我四題:
- 箭頭函式是什麼
- 程式題
- 如何避免程式短時間內請求過多 HTTP
- 忘了,但記得沒答好
先把筆記寫好。之後再慢慢補。
箭頭函式是什麼
其實不難。簡化的 es6 語法、省略的回傳、還有砍掉 this binding。這些箭頭函式的特點回答好就可以了。
程式題
參見:[JS] 箭頭函式(arrow function)和它對 this 的影響 | PJCHENder 未整理筆記
// https://pjchender.dev/javascript/js-arrow-function/
let id = 21;
let data = {
id: 21,
};
fn.call(data);
arrowFn.call(data);
function fn() {
console.log(this.constructor.name);
setTimeout(function () {
console.log(this.constructor.name);
}, 100);
}
function arrowFn() {
console.log(this.constructor.name);
setTimeout(() => {
console.log(this.constructor.name);
}, 100);
}
因為不懂 this.constructor.name
所以答不出來。即使發現 this.constructor.name 是函式名稱後也……
如何避免程式短時間內請求過多 HTTP
可以用 throttle 與 debounce:
/**
* @see [throttle](https://www.explainthis.io/zh-hant/swe/throttle)
*/
function throttle(fn, delay = 500) {
let timer = null;
return (...args) => {
if (timer) {
return;
}
timer = setTimeout(() => {
fn(...args);
timer = null;
}, delay);
};
}
/**
* @see [debounce](https://www.explainthis.io/zh-hant/swe/debounce)
*/
function debounce(fn, delay = 500) {
let timer = null;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => {
fn(...args);
}, delay);
};
}
忘了,但記得沒答好
感覺這次不行了……