#javascript #node.js #oop #object
#javascript #node.js #ооп #объект
Вопрос:
В Node.js каждый модуль находится в объектном формате, который обладает следующими свойствами:
Module {
id: '.',
exports: {},
parent: null,
filename: 'C:\Users\Node\first-app\app.js',
loaded: false,
children: [],
paths:
[ 'C:\Users\app\node_modules',
'C:\Users\\Node\node_modules',
'C:\Users\node_modules',
'C:\Users\Documents\node_modules',
'C:\Users\node_modules',
'C:\Users\node_modules',
'C:\node_modules' ] }
Но каждый модуль также находится в формате функции как таковой:
(function (exports, require, module, __filename, __dirname) {
//content of the function
})
где функция принимает exports, require, module, __filename и __dirname в качестве своих параметров. Первый находится в формате ключа / значения, а второй — в формате определения функции. Какой это формат?
Комментарии:
1. » каждый модуль также находится в формате функции » — э-э, нет? Это просто IIFE, который инициализирует объект module, не более того. Функция не поддерживается, она не представляет модуль.
2. Я думаю, что функция всегда присутствует, потому что всякий раз, когда возникает синтаксическая ошибка, функция, такая как Function. Модуль. _загрузка и функция. Вызывается Module.runMain, нет?
3. Функция создается один раз при загрузке модуля, затем она вызывается для оценки исходного кода модуля, но затем она отбрасывается. Модуль ссылается только на объект module.
Ответ №1:
В ваших примерах кода представлены две разные, но связанные вещи. Первый — это объект module, который описан здесь. Второе — это то, что nodes выполняет внутренне: обертывание модуля в анонимную функцию, которая, помимо прочего, помогает ограничить переменные верхнего уровня в вашем модуле этим модулем, а не предоставлять их глобально. Это поведение переноса модуля описано здесь.