У меня есть большое приложение JS со многими модулями, которое в конечном итоге будет в комплекте с browersify.
Но поскольку я не хочу, чтобы вся моя команда устанавливала Node.js и перестраивалась каждый раз, когда они меняются Я хочу, чтобы модули регистрировались глобально только при разработке. Я использую стандартную регистрацию для модулей следующим образом:Смешная проблема с областью в Javascript с глобальными переменными
// if browserify
if (typeof module === "object" && module.exports) {
module.exports = myModule;
} else { window.myModule = myModule; }
Вот где он получает фанк: Когда требует зависимостей в главном файле app.js, я делаю это:
if (typeof module === "object" && module.exports) {
var myModule = require("./js/myModule");
} // otherwise it's assumed to be globe, which console.log(window) confirms
console.log(myModule);
Эта консоль журнал возвращается как неопределенный, поэтому мне нужна строка else, которая говорит: } else { myModule = window.myModule; }
Вот простой jsFiddle как доказательство концепции:
if (false) {
var test = "Hello World";
} else {
window.test = "Hello Globe";
}
document.getElementById("console").innerHTML = test;
test
не определено в этом сценарии.
Что меня задевает, так это то, что содержимое инструкции if
, которая никогда не работает, по-прежнему регистрирует test
в качестве локальной переменной. Это то, что происходит? Или я просто не понимаю, как работают глобальные переменные? Я думал, что все, что зарегистрировано до window
, может быть вызвано его собственным именем, так как нам не нужно писать window.jQuery
каждый раз.
Вы пытаясь назначить переменные объекту window в узле? Потому что в узле нет оконного объекта. –
Переменная, определенная с помощью var, является глобальными переменными в узле с файлом. Но проблема с этим вопросом решена в последнем узле. Узел вводит let test = 'Hello'; Тогда тест не будет доступен из стороны if. – bilalmetla
Оператор *, который никогда не запускается, по-прежнему регистрирует тест как локальную переменную * "- уверен, что это так, вот как работают декларации. – Bergi