「中高级前端面试」JavaScript手写代码无敌秘籍攻略
JavaScript手写代码是前端面试中的重要考点之一。在这里,我将为大家准备了一份完整攻略,包含了常见的JavaScript手写代码题和解法,希望对大家在面试中有所帮助。
常见的JavaScript手写代码题
1. 实现深拷贝
深拷贝指的是将一个对象完全复制一份并且与原对象没有关联。在JavaScript中,由于对象是引用类型,所以普通的赋值复制只能实现浅拷贝。下面是一种实现深拷贝的方法:
function deepClone(obj) {
let newObj = Array.isArray(obj) ? [] : {};
if (obj && typeof obj === "object") {
for(let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = deepClone(obj[key]);
}
}
}
else {
newObj = obj;
}
return newObj;
}
这个深拷贝函数使用了递归的方式,遍历对象的每一个属性,并使用递归的方式复制每一个属性。
2. 实现防抖和节流
防抖和节流是为了在需要频繁触发某一个函数时,减少函数的执行次数。防抖和节流的实现方式如下:
防抖(debounce)
function debounce(fn, wait) {
let timer = null;
return function() {
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, arguments);
}, wait);
};
}
这个防抖函数将会在最后一次触发事件后等待一段时间再执行函数。
节流(throttle)
function throttle(fn, wait) {
let timer = null;
return function() {
if (!timer) {
timer = setTimeout(() => {
fn.apply(this, arguments);
timer = null;
}, wait);
}
};
}
这个节流函数将会在每一段时间内只执行函数一次,如果在间隔时间内多次触发函数,则只有第一次会被执行。
示例说明
示例1:使用深拷贝函数实现计算器
在这个计算器示例中,我们使用了深拷贝函数来解决计算器中的一个问题,即当用户输入了计算结果后,计算器中的结果会始终保留用户的输入值:
let calculator = {
num1: null,
num2: null,
result: 0,
setNum1(num) {
this.num1 = num;
this.updateResult();
},
setNum2(num) {
this.num2 = num;
this.updateResult();
},
updateResult() {
if (this.num1 !== null && this.num2 !== null) {
this.result = this.num1 + this.num2;
}
},
clone() {
return {
num1: this.num1,
num2: this.num2,
result: this.result
};
}
}
上面的代码中,我们通过实现计算器的clone方法来解决这个问题,该方法调用了深拷贝函数,将原始的计算器对象复制了一份,并返回复制后的结果。
示例2:使用防抖函数优化搜索框
在这个搜索框示例中,我们使用了防抖函数来解决频繁触发函数的问题,以提高搜索框的性能:
let searchBar = document.getElementById("search-bar");
let searchHandler = debounce(function() {
let keyword = searchBar.value;
fetch("/search", {
method: "POST",
body: JSON.stringify({keyword})
})
.then(response => {
// 处理搜索结果显示
})
.catch(error => {
// 处理搜索错误
});
}, 500);
searchBar.addEventListener("input", searchHandler);
上面的代码中,我们定义了一个名为searchHandler
的防抖函数,它将在搜索框输入变化时调用。该函数通过使用fetch
函数从服务器获取搜索结果,并将其展示在页面上。使用防抖函数可以防止用户在快速输入时频繁调用搜索函数,节约资源和提高性能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:「中高级前端面试」JavaScript手写代码无敌秘籍(推荐) - Python技术站