2010-11-13 3 views
26

Si oui, quelle est la syntaxe d'une telle déclaration?Les constantes globales peuvent-elles être déclarées en JavaScript?

+0

si par global vous voulez dire une variable qui peut être appelée après changement sur les pages du domaine alors ce dont vous avez besoin est des cookies .. – crodjer

+0

@Dcrodger: Non, juste global entre les fonctions. De plus, il s'agit d'une constante et non d'une variable. Par conséquent, les cookies seraient trop puissants. – Giffyguy

+0

Voir aussi: http://stackoverflow.com/questions/130396/are-there-constants-in-javascript – Ken

Répondre

23

Javascript n'a pas vraiment la notion d'une constante nommée, ou d'une propriété immuable d'un objet. (Notez que je ne parle pas ES5 ici.)

Vous pouvez déclarer GLOBALS avec une simple déclaration var dans la portée globale, comme en dehors de toute fonction dans un script inclus par une page Web:

<script> 
    var EXACTLY_ONE = 1; 

Alors votre code peut bien sûr utiliser cette constante, bien que ce ne soit pas vraiment "constant" car la valeur peut être changée (la propriété est mise à jour, en d'autres termes).

+4

Mise à jour - Mot clé const disponible dans la plupart des navigateurs modernes et standard dans ES6 Harmony: https://developer.mozilla.org/fr-fr/docs/Web/JavaScript/Référence/Statements/const – netpoetica

+0

Lisez les documents! const est limité à la portée, donc quelque chose comme: 'if (DEBUG) {const HOST =" locahost ";} autre {const HOST =" coolhost ";}' n'expose pas 'HOST' globalement. –

10

Tout est global à moins d'être déclaré avec le mot clé var.

Il n'y a pas de constantes non plus. Vous pouvez simplement les déclarer sans le mot clé var.

Si vous voulez vous assurer une portée globale, vous pouvez le jeter dans l'objet window:

window.GLOBAL_CONSTANT = "value"; 

Vous pouvez le faire à partir de toute portée. Les constantes peuvent alors être déclarées à l'intérieur des fonctions ou des fermetures, bien que je ne le recommanderais pas.

22

Comme le fait remarquer "Pointy" si soigneusement, ECMAscript n'a pas une telle fonctionnalité. Cependant, JavaScript does:

const a = 7; 
document.writeln("a is " + a + "."); 

Bien sûr, si vous écrivez du code à mettre sur le Web pour exécuter dans les navigateurs Web, cela pourrait ne pas vous aider beaucoup. :-)

+4

Pourquoi diable at-il été downvoted? C'est vrai, pas très connu et utile si vous travaillez dans un environnement Mozilla uniquement. +1 de moi. –

+5

@Tim, a été abaissé par quelqu'un qui ne connaît pas la différence entre ECMAScript et JavaScript (tm) ..., +1 aussi de moi ... BTW Une chose à garder à l'esprit, c'est que le comité TC39 a approuvé un ensemble [recommandations pour les implémenteurs] (http://j.mp/agMtti), qui inclut des restrictions sur les déclarations non standard, comme le code de mode strict 'const'- on. Firefox 4 pour le moment n'a pas de restrictions sur les déclarations non standard en mode strict, mais JavaScriptCore de WebKit les a - vraiment bien chose IMO -, vous ne pouvez pas utiliser 'const' ou avoir' FunctionDeclarations' dans 'Blocks' ... juste à garder à l'esprit .. – CMS

+0

@CMS: Intéressant, je n'avais pas examiné cela. Merci. –

3

Si vous voulez vous assurer que la valeur ne peut pas changer utilisez une fonction.

Ainsi, au lieu de:

var Const_X=12 

utilisation:

function Const_X() { 
return 12; 
} 
+0

Old answer, mais je suis sûr que vous pouvez remplacer les fonctions. – Midnightas

2

Si vous ne vous préoccupez soutenir les navigateurs plus récents (ou utilisent un transpiler tels que Babel pour soutenir les anciens navigateurs) vous pouvez faire les éléments suivants:

  1. Créer un paramètre.js avec ce que les constantes que vous voulez et les exporter:
export const FRUIT = "kiwi"; 
export const VEGETABLE = "carrot"; 
  1. Dans les fichiers que vous voulez les alors vous pouvez les importer utiliser comme suit:
import * as Settings from './settings.js' 
  1. Le n utiliser les constantes faire quelque chose comme ceci:
console.log("The unchangeable fruit is " + Settings.FRUIT); 

Ceci est une approche beaucoup plus propre que d'essayer de mettre en œuvre une constante globale, en particulier lorsque vous avez plusieurs fichiers JavaScript que vous souhaitez utiliser la constantes dans.

Questions connexes