每日三问-前端(第六期)

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分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值