【问题标题】:Used "unused var"使用“未使用的变量”
【发布时间】:2020-05-13 23:50:26
【问题描述】:

ESLint 给我以下错误消息:“'semitoneInterval' 被分配了一个值,但从未使用过 [no-unused-vars]”。我想很明显它不是一个未使用的变量,因为我使用了 30 次。在 switch 的末尾只使用一个return semitoneInterval; 可以修复错误,但我不想使用这种语法,因为写break; 的额外行很多。

import React, { Component } from 'react';

export class Piano extends Component {
  getSemitoneIntervals = chordType => {
    let semitoneInterval;

    switch (chordType) {
      case '5': return semitoneInterval = [0, 7];
      case '': return semitoneInterval = [0, 4, 7];
      case 'm': return semitoneInterval = [0, 3, 7];
      case 'sus2': return semitoneInterval = [0, 5, 7];
      case 'sus4': return semitoneInterval = [0, 2, 7];
      case 'dim': return semitoneInterval = [0, 3, 6];
      case 'aug': return semitoneInterval = [0, 4, 8];
      case '7': return semitoneInterval = [0, 4, 7, 10];
      case 'm7': return semitoneInterval = [0, 3, 7, 10];
      case 'maj7': return semitoneInterval = [0, 4, 7, 11];
      case 'mM7': return semitoneInterval = [0, 3, 7, 11];
      case '6': return semitoneInterval = [0, 4, 7, 9];
      case 'm6': return semitoneInterval = [0, 3, 7, 9];
      case 'add2': return semitoneInterval = [0, 2, 4, 7];
      case 'add9': return semitoneInterval = [0, 4, 7, 14];
      case '7-5': return semitoneInterval = [0, 4, 6, 10];
      case '7+5': return semitoneInterval = [0, 4, 8, 10];
      case 'dim7': return semitoneInterval = [0, 3, 6, 9];
      case 'm7b5': return semitoneInterval = [0, 3, 6, 10];
      case 'aug7': return semitoneInterval = [0, 4, 8, 10];
      case '6/9': return semitoneInterval = [0, 4, 7, 9, 14];
      case '9': return semitoneInterval = [0, 4, 7, 10, 14];
      case 'm9': return semitoneInterval = [0, 3, 7, 10, 14];
      case 'maj9': return semitoneInterval = [0, 4, 7, 11, 14];
      case '11': return semitoneInterval = [0, 4, 7, 10, 14, 17];
      case 'm11': return semitoneInterval = [0, 3, 7, 10, 14, 17];
      case 'maj13': return semitoneInterval = [0, 4, 7, 11, 14, 21];
      case '13': return semitoneInterval = [0, 4, 7, 10, 14, 17, 21];
      case 'm13': return semitoneInterval = [0, 3, 7, 10, 14, 17, 21];
      default: return console.log('Not valid chord type');
    }
  }

  //[..]
}

export default Piano;

【问题讨论】:

  • 没用,只返回数组case '5': return semitoneInterval = [0, 7];应该是case '5': return [0, 7];
  • 我建议将所有这些情况提取到一个“地图对象”中,在您的组件之外定义,例如const intervals = { '5': [0, 7], 'm': [0, 3, 7], ... }。这应该允许你做一些更像return intervals[chordType] 的事情。这将比 switch 语句更少的代码噪音。
  • 您可能希望将该错误消息再次显示为“分配了一个值,但从未使用过”。我只是创建一个对象,其键是cases,值是数组。那么函数就是return obj[chordType];

标签: javascript reactjs eslint


【解决方案1】:

您将semitoneInterval 分配给一个值并立即返回它的值。

switch 语句中的任何返回都会导致函数停止执行并返回一个值。因此,semitoneInterval 在它经过的任何case 中都被分配了一个值,但其中存储的值从未实际使用过(只有你的函数返回的值是)。

你的 switch 语句也可以像这样工作:

switch (chordType) {
      case '5': return [0, 7];
      case '': return [0, 4, 7];
    ...

另一个eslint rule(虽然有点不同的主题)也解释了(用更好的词)为什么以这种方式分配值在您的代码中没有实际用途。

【讨论】:

    【解决方案2】:

    不,你没有使用这个变量,你只是在赋值期间返回它,但你并没有真正使用它。
    你可以只返回值而不给变量赋值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 2018-07-21
      • 2013-11-17
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      相关资源
      最近更新 更多