Как вы предоставляете глобальную функцию 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 3

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;
};

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

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

/* globals Counter */

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

// eslintrc.js

module.exports = {
  // ...

  globals: {
    'Counter': true
  }
}

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

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