2023年5月20日
先回归一下昨天的问题及答案
1.问题:解释一下什么是事件委托(Event Delegation)?
答案:事件委托是一种利用事件冒泡的机制,将事件处理程序绑定到父元素上,而不是绑定到每个子元素上的技术。通过这种方式,可以减少事件处理程序的数量,并且可以在动态添加或删除子元素时仍能正常工作。
当一个事件发生在子元素上时,事件首先被子元素处理,然后再冒泡到父元素。通过在父元素上监听并处理事件,可以避免为每个子元素都添加事件监听器,提高性能和代码的简洁性。
2.问题:解释一下什么是单页应用(Single Page Application,SPA)?
答案:单页应用是指在加载初始页面后,所有进一步的页面导航和用户交互都在同一个页面中完成,不需要重新加载整个页面的应用程序。
在传统的多页应用中,每个页面都会重新加载和渲染,而在单页应用中,通过使用前端路由和 AJAX 技术,可以在同一个页面中切换不同的视图和内容,使用户获得更流畅的体验。
单页应用通常依赖于前端框架(如React、Angular、Vue等),利用动态更新页面内容的能力,提供更好的交互和响应性。
3.问题:解释一下什么是防抖(Debounce)和节流(Throttle)?
答案:防抖(Debounce)和节流(Throttle)都是用于限制事件触发频率的技术。
防抖指的是在事件触发后等待一段时间(比如300毫秒),如果这段时间内没有再次触发该事件,那么执行相应的操作;如果在等待时间内又触发了该事件,则重新计时,等待一段时间后再执行。防抖常用于处理频繁触发的事件,例如搜索框输入事件。
节流指的是在一段时间内只执行一次事件,无论该事件触发多频繁。比如设置一个300毫秒的时间间隔,在该时间内只执行一次事件操作,无论触发多少次事件。节流常用于限制某些操作的执行频率,例如滚动事件。
下面是一个简单的节流(throttle)函数的代码示例:
function throttle(func, delay) {
let timerId;
return function(...args) {
if (timerId) {
return; // 在延迟期间内已经触发过一次,则忽略后续触发
}
timerId = setTimeout(() => {
func.apply(this, args); // 执行函数
timerId = null; // 重置定时器标识
}, delay);
};
}
// 使用示例
function handleScroll() {
console.log('Scroll event handler');
}
const throttledScroll = throttle(handleScroll, 300);
window.addEventListener('scroll', throttledScroll);
在上面的示例中,throttle
函数接受一个函数 func
和一个延迟时间 delay
作为参数。返回的函数是一个节流函数,它会在延迟时间内只执行一次传入的函数 func
。
在使用示例中,我们定义了一个名为 handleScroll
的滚动事件处理函数,并通过 throttle
函数创建了一个节流函数 throttledScroll
。将 throttledScroll
作为事件监听器绑定到 scroll
事件上,这样在滚动事件触发时,handleScroll
函数就会被节流地执行,限制了触发频率。
下面的节流函数示例代码:
function throttle(func, delay) {
let lastCallTime = 0;
return function(...args) {
const currentTime = Date.now();
if (currentTime - lastCallTime >= delay) {
func.apply(this, args);
lastCallTime = currentTime;
}
};
}
// 使用示例
function handleResize() {
console.log('Resize event handler');
}
const throttledResize = throttle(handleResize, 500);
window.addEventListener('resize', throttledResize);
在上述示例中,throttle
函数接受一个函数 func
和一个延迟时间 delay
作为参数。返回的函数是一个节流函数,它会在延迟时间内只执行一次传入的函数 func
。
在使用示例中,我们定义了一个名为 handleResize
的调整窗口大小事件处理函数,并通过 throttle
函数创建了一个节流函数 throttledResize
。将 throttledResize
作为事件监听器绑定到 resize
事件上,这样在窗口调整大小事件触发时,handleResize
函数就会被节流地执行,限制了触发频率。
2023年5月21日
1.问题:Vue 中的 computed 和 methods 有什么区别?
2.问题:Vue 中的 v-model 指令是用来做什么的?
3.问题:Vue 的生命周期钩子函数有哪些?请按照它们的触发顺序进行排序。
上面问题的答案会在第二天的公众号推文中公布,大家可以关注公众号,第一时间获得推送内容。
学习不打烊,充电加油只为遇到更好的自己,每天早上9点纯手工发布面试题(死磕自己,愉悦大家) 希望大家在这浮夸的程序员圈里保持冷静,每天坚持花20分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。