2010-11-13 10 views
26

Jeśli tak, jaka jest składnia takiej deklaracji?Czy globalne stałe mogą być zadeklarowane w JavaScript?

+0

jeśli przez globalną masz na myśli zmienną, która może być wywołana po zmianie na stronach domeny, to potrzebujesz plików cookie .. – crodjer

+0

@Dcrodger: Nie, tylko globalnie pomiędzy funkcjami. Jest to również stała, a nie zmienna - dlatego ciasteczka mogą być przesadzone. – Giffyguy

+0

Zobacz także: http://stackoverflow.com/questions/130396/are-there-constants-in-javascript – Ken

Odpowiedz

23

Javascript tak naprawdę nie ma pojęcia określonej stałej lub niezmiennej właściwości obiektu. (Zauważ, że nie mówię o ES5 tutaj).

Można zadeklarować globalnych z prostym var deklaracji w zakresie globalnym, jak poza dowolnej funkcji w skrypcie zawarte przez strony:

<script> 
    var EXACTLY_ONE = 1; 

Twój kod może oczywiście korzystać z tej stałej, chociaż nie jest tak naprawdę "stały", ponieważ wartość można zmienić (innymi słowy, aktualizacja właściwości).

+4

Aktualizacja - słowo kluczowe const dostępne w większości nowoczesnych przeglądarek i standardem w ES6 Harmony: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statement/const – netpoetica

+0

Czytanie dokumentów! const jest ograniczone do zakresu, więc coś takiego: 'if (DEBUG) {const HOST =" locahost ";} else {const HOST =" coolhost ";}' nie narazi na ekspozycję 'HOST'. –

10

Wszystko jest globalne, chyba że zostało zadeklarowane za pomocą słowa kluczowego var.

Nie ma również stałych. Możesz po prostu zadeklarować je bez słowa kluczowego var.

Jeśli chcesz, aby zapewnić zasięg globalny można wyrzucić go do obiektu window:

window.GLOBAL_CONSTANT = "value"; 

Można to zrobić z poziomu dowolnego zakresu. Stałe mogą być następnie zadeklarowane wewnątrz funkcji lub zamknięć, chociaż nie polecam tego.

22

Jako "Pointy", tak ostrożnie zauważa, ECMAscript nie ma takiej funkcji. Jednak JavaScript does:

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

Oczywiście, jeśli piszesz kod, aby umieścić w sieci działają w przeglądarkach internetowych, to może nie pomóc dużo. :-)

+4

Dlaczego, na Boga, zostało to odrzucone? To prawda, mało znana i użyteczna, jeśli pracujesz w środowisku opartym tylko na Mozilli. +1 ode mnie. –

+5

@Tim, została odrzucona przez kogoś, kto nie zna różnicy między ECMAScript i JavaScript (tm) ..., +1 także ode mnie ... BTW Jedną rzeczą, o której trzeba pamiętać, jest to, że komitet TC39 zatwierdził zestaw [rekomendacje dla implementatorów] (http://j.mp/agMtti), który zawiera ograniczenia dla niestandardowych deklaracji - "const" - na kodzie trybu ścisłego. Firefox 4 w tej chwili nie ma żadnych ograniczeń co do niestandardowych deklaracji w trybie ścisłym, ale JavaScriptCore WebKita ma je - naprawdę dobrze - IMO-, nie można używać 'const' lub' FunctionDeclarations' wewnątrz 'Blocks' ... tylko należy pamiętać ... – CMS

+0

@CMS: Interesujące, nie patrzyłem na to. Dzięki. –

3

Jeśli chcesz się upewnić, że wartości nie można zmienić, użyj funkcji.

Więc zamiast:

var Const_X=12 

zastosowanie:

function Const_X() { 
return 12; 
} 
+0

Stara odpowiedź, ale jestem prawie pewien, że można zastąpić funkcje. – Midnightas

2

Jeśli tylko dbają o wspieranie nowszych przeglądarek (lub używasz transpiler takich jak Babel do obsługi starszych przeglądarek) można zrobić następujące:

  1. Utwórz ustawienia.js złożyć cokolwiek Stałe chcesz i eksportować je:
export const FRUIT = "kiwi"; 
export const VEGETABLE = "carrot"; 
  1. W plików, które chcą korzystać z nich można następnie zaimportować je w następujący sposób:
import * as Settings from './settings.js' 
  1. n używać stałe zrobić coś takiego:
console.log("The unchangeable fruit is " + Settings.FRUIT); 

Jest to znacznie czystsze podejście niż próbować realizować globalną stałą, zwłaszcza gdy masz wiele plików JavaScript, które chcesz użyć stałe w.