Como declarar uma variável global em um arquivo .js

Eu preciso de algumas variables ​​globais que eu preciso em todos os arquivos .js .

Por exemplo, considere os seguintes 4 arquivos:

  1. global.js
  2. js1.js
  3. js2.js
  4. js3.js

Existe uma maneira que eu possa declarar 3 variables ​​globais em global.js e acessá-los em qualquer um dos outros 3 arquivos .js considerando eu carregar todos os 4 arquivos acima em um documento HTML?

Alguém pode me dizer se isso é possível ou há algum trabalho para conseguir isso?

Apenas defina suas variables ​​em global.js fora de um escopo de function:

 // global.js var global1 = "I'm a global!"; var global2 = "So am I!"; // other js-file function testGlobal () { alert(global1); } 

Para garantir que isso funcione, você deve include / link para global.js antes de tentar acessar as variables ​​definidas nesse arquivo:

        [...]  

É claro que você poderia vincular as tags de script logo antes da tag de fechamento, se não quiser que o carregamento de arquivos js interrompa o carregamento inicial da página.

A abordagem recomendada é:

 window.greeting = "Hello World!" 

Você pode acessá-lo em qualquer function:

 function foo() { alert(greeting); // Hello World! alert(window["greeting"]); // Hello World! alert(window.greeting); // Hello World! (recommended) } 

Essa abordagem é preferida por dois motivos.

  1. A intenção é explícita. O uso da palavra-chave var pode facilmente levar à declaração de vars globais que deveriam ser locais ou vice-versa. Esse tipo de escopo de variables ​​é um ponto de confusão para muitos desenvolvedores de Javascript. Então, como regra geral, certifico-me de que todas as declarações de variables ​​sejam precedidas pela palavra-chave var ou pela window prefixo.

  2. Você padroniza essa syntax para ler as variables ​​dessa maneira também, o que significa que um var localmente escopo não atrapalha o var global ou vice-versa. Por exemplo, o que acontece aqui é ambíguo:

  greeting = "Aloha"; function foo() { greeting = "Hello"; // overrides global! } function bar(greeting) { alert(greeting); } foo(); bar("Howdy"); // does it alert "Hello" or "Howdy" ? 

No entanto, isso é muito mais limpo e menos propenso a erros (você realmente não precisa se lembrar de todas as regras de escopo da variável):

  function foo() { window.greeting = "Hello"; } function bar(greeting) { alert(greeting); } foo(); bar("Howdy"); // alerts "Howdy" 

Tentaste?

Se você fizer:

 var HI = 'Hello World'; 

Em global.js . E então faça:

 alert(HI); 

Em js1.js ele irá alertá-lo bem. Você só precisa include global.js antes do restante no documento HTML.

O único problema é que você precisa declará-lo no escopo da janela (não dentro de nenhuma function).

Você poderia apenas nix a parte var e criá-los dessa maneira, mas não é uma boa prática.

Como mencionado acima, há problemas com o uso do escopo mais alto em seu arquivo de script. Aqui está outro problema: O arquivo de script pode ser executado em um contexto que não é o contexto global em algum ambiente de tempo de execução.

Foi proposto atribuir o global à window diretamente. Mas isso também depende do tempo de execução e não funciona no Node, etc. Ele mostra que o gerenciamento de variables ​​globais portáteis precisa de uma consideração cuidadosa e de um esforço extra. Talvez eles consertem isso nas futuras versões do ECMS!

Por enquanto, eu recomendaria algo como isso para dar suporte ao gerenciamento global adequado para todos os ambientes de tempo de execução:

 /** * Exports the given object into the global context. */ var exportGlobal = function(name, object) { if (typeof(GLOBAL) !== "undefined") { // Node.js GLOBAL[name] = object; } else if (typeof(window) !== "undefined") { // JS with GUI (usually browser) window[name] = object; } else { throw new Error("Unkown run-time environment. Currently only browsers and Node.js are supported."); } }; // export exportGlobal itself exportGlobal("exportGlobal", exportGlobal); // create a new global namespace exportGlobal("someothernamespace", {}); 

É um pouco mais de digitação, mas torna seu gerenciamento de variables ​​globais pronto para o futuro.

Isenção de responsabilidade: Parte dessa ideia surgiu quando analisei versões anteriores do stacktrace.js . Acredito que também é possível usar o Bower ou outras ferramentas para obter uma detecção mais confiável e menos agressiva do ambiente de tempo de execução.

Sim, você pode acessá-los. Você deve declará-los em ‘espaço público’ (fora de qualquer function) como:

 var globalvar1 = 'value'; 

Você pode acessá-los mais tarde, também em outros arquivos.