Вы можете сказать, что JS относится к категории языков, где идея о том, что все является объектом на равных основаниях, является частью «философии», которая руководила ее развитием. Node require
- это функция (объект), предоставляемая средой, а также объект module
. Этот шаблон называется Common JS format.
На самом деле вам не нужно назначать результат функции require переменной. Это редко встречается на практике, но модуль узла, который вы вызываете, может быть вызван, чтобы вызвать действие, например, может потребоваться использование файла sugar.js, который изменяет некоторые из собственных объектов, но не имеет собственных методов , поэтому не было бы смысла назначать возвращаемое значение (то есть объект module.exports
, который был предоставлен во время выполнения этого модуля).
Более распространенный пример не присвоения модуля переменной - это когда используется require
только для того, чтобы захватить некоторое свойство с модуля - например, var x = require('module').methodOfInterest
. Аналогично, некоторые модули возвращают конструктор, поэтому иногда вы можете увидеть var instance = new (require('ConstructorModule'))(options)
(что, на мой взгляд, уродливо, требования обычно должны быть сгруппированы в верхней части файла и действовать только потом).
Примечание: на ваш вопрос нет конкретного ответа, поэтому вероятность того, что он будет закрыт, как SO-несоответствующий.
ECMAScript 5.1 (https://es5.github.io/) - это язык Node.js. У него нет импорта. ES6 делает, и когда V8 поддерживает его, узел будет поддерживать его. Между тем есть ES6 -> ES5 конвертеры, которые позволяют вам использовать импорт в JS сегодня, если хотите. – generalhenry
, чтобы вы могли использовать переменную для ссылки на возвращаемый объект. 'a.someMethodOfA();' например. – Todd