Глобальная переменная NodeJS не переназначается - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь выполнить модульное тестирование кода, который использует библиотеку JavaScript, для которой установлена ​​глобальная переменная, если она не существует.Шаблон, который использует библиотека:

var GLOBAL_VAR = GLOBAL_VAR || {}

Это работает в мире браузера, но когда я выполняю код в NodeJS, он не работает.Проблема сводится к следующему:

var myGlobal = 'CORRECT';
console.log('Prints CORRECT', myGlobal || 'WRONG');
(function () {
  // Why does this print WRONG?
  var myGlobal = myGlobal || 'WRONG';
  console.log('Prints WRONG', myGlobal);
}).call(this);

(function () {
  console.log('Prints CORRECT', myGlobal || 'WRONG');
}).call(this);

Почему первая функция печатает НЕПРАВИЛЬНО, а вторая функция печатает ПРАВИЛЬНО?

1 Ответ

2 голосов
/ 19 сентября 2019

Вы объявляете локальную переменную myGlobal внутри первой анонимной функции.Это затеняет глобальную переменную.

Затем в анонимной функции вы объявляете:

var myGlobal = myGlobal || 'WRONG';
//             ^
//             |  this local variable is undefined here, as
//                the global is not accessible with this name

Именно поэтому myGlobal (локальная переменная) получает значение 'WRONG'.

.решение состоит в том, чтобы переименовать смешанную локальную переменную myGlobal в анонимной функции во что-то, что не скрывает глобальную переменную.

Обратите внимание, что у вас не возникло бы этой проблемы, если бы вы использовали let как letне позволяет использовать переменную в качестве значения в ее собственном объявлении:

let x = x || 'WRONG'; // should produce an error and leave x undefined.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...