You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归箭头函数中ESlint no-unused-vars误报问题咨询

自定义递归箭头函数触发ESlint no-unused-vars误报?

我实现了一个用于二分查找的自定义生成函数,代码如下:

const indexOf = (key) => (element, array, start, end) => {
  start = start || 0;
  end = end || array.length;
  const pivot = parseInt(start + (end - start) / 2, 10);
  if (array[pivot][key] === element[key]) return pivot;
  if (end - start <= 1) {
    return array[pivot][key] > element[key] ? pivot - 1 : pivot;
  }
  if (array[pivot][key] < element[key]) {
    return indexOf(key)(element, array, pivot, end);
  }
  return indexOf(key)(element, array, start, pivot);
};

完成后ESlint针对最后一条return语句抛出“'indexOf'已赋值但未使用 no-unused-vars”警告。该函数为递归箭头函数,indexOf会在后续递归调用中被使用,我怀疑ESlint未正确解析条件结构导致误报,请问该推测是否正确,或是我存在疏漏?


结论

你的推测是正确的,这属于ESlint静态分析时的误报。

原因在于你定义的indexOf是高阶箭头函数,递归调用时需要通过indexOf(key)重新生成查找函数,但ESlint的解析器目前没能正确识别这种嵌套式的递归引用模式,误判indexOf变量未被使用。

代码逻辑验证

你的二分查找逻辑本身没有疏漏:递归分支的判断、边界处理、pivot计算都是合理的,indexOf确实会在递归过程中被调用,不存在未使用的情况。

解决办法

  1. 改用命名函数表达式(推荐)
    用具名的内部函数替代箭头函数,让ESlint能明确识别递归引用:

    const indexOf = (key) => function search(element, array, start, end) {
      start = start || 0;
      end = end || array.length;
      const pivot = parseInt(start + (end - start) / 2, 10);
      if (array[pivot][key] === element[key]) return pivot;
      if (end - start <= 1) {
        return array[pivot][key] > element[key] ? pivot - 1 : pivot;
      }
      if (array[pivot][key] < element[key]) {
        return search(element, array, pivot, end);
      }
      return search(element, array, start, pivot);
    };
    
  2. 临时忽略ESlint警告
    在变量声明前添加注释,仅针对该变量关闭警告(不推荐长期使用):

    /* eslint-disable-next-line no-unused-vars */
    const indexOf = (key) => (element, array, start, end) => {
      // ... 原有代码
    };
    
  3. 升级ESlint版本
    部分较新的ESlint版本已经修复了这类嵌套递归箭头函数的识别问题,升级到最新稳定版可能解决该误报。

内容的提问来源于stack exchange,提问作者Chgad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:45:37