как использовать глобальную переменную, когда она принимает значение в другом файле - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть файл с именем app. js:

let id = 0;
const Func = require('./func.js');
Func.myFunc();
console.log(id);


module.exports = {
     id 
};

Также у меня есть еще один файл с именем fun c. js:

const App = require('./app.js');
var myFunc = () => {
 App.id = 100;
}


module.exports = {
    myFunc
};

Но console.log(id) возвращает: 0

Ответы [ 3 ]

0 голосов
/ 04 февраля 2020

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

Прочтите это, чтобы лучше понять:

https://nodejs.org/api/modules.html#modules_cycles

Как работать с циклическими c зависимостями в Node.js

0 голосов
/ 04 февраля 2020

Есть две проблемы с вашим фрагментом кода:

  • круговая зависимость
  • module.exports.id - это не тот же объект, что и идентификатор переменной в приложении. js

Чтобы решить первую проблему, вы должны создать третий файл, в котором будет объявлена ​​переменная, и другие модули будут использовать его.

Теперь, чтобы проиллюстрировать вторую проблему посмотрите на следующее.

// testModule.js
let variable = 0;

function get_variable() {
    return variable;
}

module.exports = {variable, get_variable};
// app.js
const testModule = require('./testModule.js');

testModule.variable = 1234;
console.log(testModule.variable);       // will print '1234'
console.log(testModule.get_variable()); // will print '0'

Это небольшое недопонимание модулей может привести к тонким неприятным ошибкам. Я считаю, что лучшим решением для решения этой проблемы было бы не экспортировать свойство 'variable' напрямую, а иметь функции getter / setter в модуле, почти как преобразование его в классоподобную вещь.

// testModule.js
let variable = 0;

function get_variable() {
    return variable;
}

function set_variable(value) {
    variable = value;
}

module.exports = {get_variable, set_variable};
0 голосов
/ 04 февраля 2020

Добавьте еще один журнал, например:

 // app.js ...
 console.log(module.exports);
 module.exports = { id };
 console.log(id);

, чтобы увидеть, что ваш код работает как-то, в том смысле, что module.exports имеет установленное свойство id, но вы переопределяете это впоследствии. Кроме того, свойство объекта экспорта не имеет ничего общего с переменной id (ну, позднее копируется в первую), поэтому console.log никогда не будет записывать 100.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...