#javascript #node.js #reactjs #react-native
#javascript #node.js #reactjs #react-native
Вопрос:
В вызываемом файле File_A.js
у меня есть функция, которая содержит константу. Я хочу экспортировать эту константу, и только эту (не всю функцию), чтобы использовать значение константы в другом вызываемом файле File_B.js
. Я пытался использовать module.exports
, но он возвращает, что переменная не определена. Ниже упрощенный пример. Спасибо
// my function in File_A.js
const MyFunctionA = () => {
const myVariable = 'hello'
module.export = {myVariable: myVariable}
return (
/*...*/
);
}
// my second function in File_B.js
const MyFunctionB = () => {
const {myVariable} = require('./File_A.js');
console.log(myVariable) // undefined
return(
/*...*/
);
}
Комментарии:
1. Не так ли
module.exports
(сs
помощью)?2. Module.export должен находиться в глобальной области видимости, так как он не будет назначен до тех пор, пока не будет вызвана MyFunctionA.
3. @PraveenKumarPurushothaman — Удивительно, но при том стиле экспорта, который использует OP, вы can…it это просто не очень хорошая идея. 🙂
4. Если это постоянная ссылка на неизменяемую вещь (в данном случае строку), просто переместите ее из функции на верхний уровень, нет причин скрывать ее в замыкании.
5. @Ти Джей Краудер Благодарит человека. Это что-то новое, что я узнал сегодня.
Ответ №1:
как экспортировать константу, которая находится внутри функции?
На это есть два ответа:
- Вы этого не делаете. Это не имеет смысла. Вместо этого вы перемещаете константу из функции и экспортируете ее.
- Вы делаете это точно так же, как и раньше, но константа не будет включена в экспорт модуля, пока
MyFunctionA
не будет выполнена хотя бы один раз. Это возможно, потому что используемые вами модули в стиле CommonJS являются динамическими и могут меняться во время выполнения. Однако, как вы обнаружили, создание зависимости вашего экспорта от вызова функции вызывает проблемы.
Итак, взяв на вооружение # 1, мы получаем:
// my function in File_A.js
const myVariable = "hello"; // Odd name for a constant? ;-)
module.exports.myVariable = myVariable;
const MyFunctionA = () => {
return (
/*...*/
);
};
Пара замечаний по этому поводу:
MyFunctionA
по-прежнему закрывается над константой и ссылается на нее точно так же, как раньше.myVariable
не становится глобальным, потому что область верхнего уровня модуля CommonJS не является глобальной областью.