Skip to content

面试题

第 1 题:写 React / Vue 项目时为什么要在列表组件中写 key,

其作用是什么?

key 是给每一个 vnode 的唯一id, 可以依靠 key,更准确,更快的拿到 oldVnode 中对应的 vnode 节点

第 2 题:['1', '2', '3'].map(parseInt)

Array.prototype.map(callbackFn: (value: T, index: number, array: T[]) => U, thisArg?: any)parseInt(string, radix)

js
parseInt('1', 0)
parseInt('2', 1)
parseInt('3', 2)

// [1, NaN, NaN]

第 3 题:什么是防抖和节流?有什么区别?如何实现?

防抖——触发高频事件后 n 秒后函数只会执行一次,如果 n 秒内高频事件再 次被触发,则重新计算时间;

js
function debounce(fn, delay = 400) {
  let timer = null
  return function () {
    if (timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(() => {
      fn.apply(this, arguments)
    }, delay)
  }
}

节流——高频事件触发,但在 n 秒内只会执行一次,所以节流会稀释函数的执 行频率。

js
function throttle(fn, delay = 400) {
  let timer = null
  return function () {
    if (timer) return 
    timer = setTimeout(() => {
      fn.apply(this, arguments)
      timer = null
    }, delay)
  }
}