Должен ли я включить module.exports выше или ниже конструктора

Я использую Codacy для своего проекта и получаю предупреждение о том, что я не должен использовать переменные, которые я объявляю позже, что вполне логично. Тем не менее, это должно работать нормально для конструкторов.

Это моя основная структура файлов:

/* Export */
module.exports = myObject; // this line

/* Import */
var otherObject = require('./otherObject');

function myObject(input) {
}

myObject.prototype = {
}

Могут ли возникнуть какие-либо проблемы при экспорте до объявления конструктора объекта? Должен ли я переместить строку экспорта ниже конструктора, как?

1 ответ

Решение

Это поместит правильную функцию в module.exports из-за подъема функции:

module.exports = myObject;
function myObject(input) {
}

Это положит undefined в module.exports (без ошибок) из-за подъема переменной:

module.exports = myObject;
var myObject = function (input) {
};

Это поднимет ReferenceError: myObject is not defined исключение из-за let обзорные правила:

module.exports = myObject;
let myObject = function (input) {
};

и так будет из-за const обзорный:

module.exports = myObject;
const myObject = function (input) {
};

С другой стороны, все они будут работать так же, как и ожидалось, если вы положите module.exports = myObject; в конце - что вам придется сделать в любом случае, если вы будете следовать, например, стилю кодирования Airbnb:

или если вы используете некоторые правила линтера, например, это правило ESLint:

Запретить раннее использование (не использовать перед определением)

В JavaScript до ES6 объявления переменных и функций поднимались в верхней части области видимости, поэтому можно использовать идентификаторы перед их формальными объявлениями в коде. Это может сбивать с толку, и некоторые считают, что лучше всегда объявлять переменные и функции перед их использованием.

В ES6 привязки на уровне блоков (let и const) вводят "временную мертвую зону", в которой ReferenceError будет выбрасываться при любой попытке доступа к переменной до ее объявления.

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