Как вы предоставляете глобальную функцию JavaScript без ошибки ESLint no-unused-var?

Следующий код действителен в ESLint с руководством по стилю Google с одним исключением; функция закрытия Counter получает no-unused-vars ошибка при проверке скрипта с помощью ESLint.

/**
 * Create a counter that is incremented and returned when called
 * @return {object} - incrementor function
 */
function Counter() {
  var _i = 0;

  /**
   * increment counter
   * @return {int} - The incremented integer
   */
  function _incrementor() {
    _i++;
    return _i;
  }

  _incrementor.incr = function() {
    this.call();
    return _incrementor;
  };

  _incrementor.val = function(val) {
    if (!arguments.length) { return _i; }
    _i = val;
    return _incrementor;
  };

  return _incrementor;
}

Я хотел бы иметь эту функцию (или одну структуру таким же образом) в качестве автономного сценария, который я могу включить в свой HTML, а затем вызвать из другого сценария, например, так:

var count = Counter()
    .val(5);

count.incr() 
console.log(count.val())  // prints => 6

Я пытался в том числе /* exported Counter */ в верхней части скрипта, но ошибка не устранена. Как мне замолчать / исправить эту ошибку?

2 ответа

Решение

Явное добавление счетчика в глобальную область заглушает эту ошибку и предотвращает ошибки, которые могут возникнуть в результате неявной глобальной области, используемой в вопросе.

/**
 * Create a counter that is incremented and returned when called
 * @return {object} - incrementor function
 */
this.Counter = function() {
  var _i = 0;

  /**
   * increment counter
   * @return {int} - The incremented integer
   */
  function _incrementor() {
    _i++;
    return _i;
  }

  _incrementor.incr = function() {
    this.call();
    return _incrementor;
  };

  _incrementor.val = function(val) {
    if (!arguments.length) {
      return _i;
    }
    _i = val;
    return _incrementor;
  };

  return _incrementor;
};

Вот несколько вариантов указания линтеру разрешить глобальную переменную Counter:

Вариант № 1: Добавьте этот комментарий в начало файла js, когда вам нужно использовать глобальную переменную:

/* globals Counter */

Вариант № 2: Добавьте имя переменной в свойство globals в вашем файле конфигурации eslint:

// eslintrc.js

module.exports = {
  // ...

  globals: {
    'Counter': true
  }
}

См. Документацию ESLint здесь для получения дополнительной информации.

Примечание: вы также можете использовать env Свойство в вашем конфигурационном файле для предопределенных наборов глобальных переменных, таких как: браузер (т.е. localStorage), jquery, узел и т. д.). Смотрите здесь.

Другие вопросы по тегам