JavaScript 常见题

JavaScript 常见题

November 29, 2022
code-question

大数相加 #

思路:从右到左循环去加


/**
 * js 大数相加
 * 字符串拼接,用加法法则计算
 * @param { string } a
 * @param { string } b
 * @returns string
 */
function sumBigNumber(a, b) {
  let res = "",
    temp = 0;

  /** @type {string[]} */
  const arrA = a.split("");
  /** @type {string[]} */
  const arrB = b.split("");

  while (arrA.length || arrB.length || temp) {
    // ~~ 将操作数转换成 int
    temp += ~~arrA.pop() + ~~arrB.pop();
    res = (temp % 10) + res;
    temp = temp > 9 ? 1 : 0;
  }

  // 删掉头部的 0
  return res.replace(/^0+/, "");
}

Debounce #

防抖

例子:用户在 input 框输入,一段时间没有输入后,再发起网络请求

function debounce(fn, time) {
  let timeout;
  return function () {
    const func = () => fn.apply(this, arguments);
    clearTimeout(timeout);
    timeout = setTimeout(func, time);
  };
}

Throttle #

节流, 每隔一段时间执行一次

例子: 滚动条滚动使,没必要响应每次滚动事件,每隔500ms响应一次即可

function throttle(fn, time) {
  let timer;
  return function () {
    if (timer) {
      return;
    }
    let func = () => {
      fn.apply(this, arguments);
      timer = null;
    };
    timer = setTimeout(func, time);
  };
}