Может ли массив быть в глобальной области видимости?
Подскажите пожалуйста, не могу сообразить, вроде понимаю, про области видимости в контексте переменных. Но тут столкнулся с такой задачей, что у меня есть файл
main.js
к нему подключены модуля
const a = require('./fn/a')
const b = require('./fn/b')
в модулях функции, которые записывают данные
я хочу сделать в main.js let data = []
и в функции(в модуле) делать что-то data.push({obj:'obj'})
ну массив не изменяется
если же я создаю в main.js переменную например let x = 4;
то модуль видит эту переменную, но из модуля я её изменять не могу
вопрос все же можно ли создать глобальный массив, к которому можно обращаться из модулей и изменять его
Не делай так. Экспортируй функции и используй в main.js. И второе, функция видит лексическое значение только в момент создания. Твой же код не предсказуем от слова вообще!
можно ли создать глобальный массив, к которому можно обращаться из модулей и изменять его
Можно, но не нужно. Грязно и дешево: обращаться к глобальному объекту. Например globalThis:
// модуль А
globalThis.data = [];
// модуль B
globalThis.data.push({ prop: value});
Чем плохо: а что если сначала выполнится модуль B, и только потом модуль A? Ну и вообще это оч. плохая практика. Мало ли, кто ещё захочет вжух! и стереть globalThis.data?
я хочу сделать в main.js let data = []
и в функции(в модуле) делать что-то data.push({obj:'obj'})
ну так создайте в модуле функцию, которая будет принимать параметром массив, затем в main.js создаёте этот массив и вызываете функцию из модуля, прокидывая туда этот массив
WapSter, Сергей Соколов, Everybody_Lies, всем спасибо за помощь, я разобрался. Действительно в силу слабых знаний, я забыл, что можно сделать как написал everybody
Спасибо))!