Domanda

È possibile simulare costanti in Javascript usando le chiusure? Se è così, puoi fornirmi un esempio?

È stato utile?

Soluzione

Firefox e Chrome supportano entrambi const parola chiave. IE no. Quindi, se hai bisogno di costanti e non hai bisogno di supportare IE, const non è una cattiva scelta. Tuttavia, nessuno dei due browser produce un errore di runtime quando un valore viene assegnato a una const ; i valori rimangono semplicemente invariati.

Altrimenti, è necessario utilizzare le funzioni per definire le costanti che non possono essere modificate:

function PI() { return 3.14159; }

var area = radius*radius * PI();

Ovviamente, potresti semplicemente scrivere codice che non modifica mai determinate variabili e forse stabilire uno schema di denominazione per tali variabili in modo tale da riconoscere che non dovranno mai essere modificate ...

// note to self: never assign values to variables utilizing all-uppercase name
var PI = 3.14159;

Un'altra opzione per " simulare " le costanti dovrebbero usare la funzionalità di definizione della proprietà disponibile in alcuni browser per definire proprietà di sola lettura su un oggetto. Naturalmente, poiché i browser che supportano le definizioni delle proprietà non includono IE, ciò non aiuta davvero ... (nota che IE 8 supporta le definizioni delle proprietà dopo una moda ... ma non su oggetti JavaScript)

Infine, negli scenari molto forzati potresti usare argomenti di funzione come costanti (forse questo è quello che stavi pensando quando hai suggerito chiusure?). Mentre si comportano come variabili, rimangono nell'ambito della funzione in cui sono definiti e non possono quindi influenzare i valori detenuti da variabili con lo stesso nome al di fuori della funzione in cui sono modificati:

var blah = 3;
var naw = "nope";
(function(blah, naw)
{
  blah = 2;
  naw = "yeah";
  alert(naw + blah); // "yeah2"
})(blah, naw);

alert(naw + blah); // "nope3"

Nota che qualcosa di simile a questo è comunemente usato dai plugin jQuery , ma per la ragione opposta: il codice jQuery viene solitamente scritto usando la scorciatoia $ per fare riferimento all'oggetto jQuery, ma la libreria è destinata a continuare a funzionare anche se qualche altro codice ridefinisce quel simbolo; avvolgendo il codice della libreria e del plugin in funzioni anonime con un parametro $ e quindi passando jQuery come argomento, il codice viene isolato dalle modifiche che altre librerie potrebbero apportare al valore di $ in seguito.


Vedi anche: Ci sono costanti in Javascript?

Altri suggerimenti

Puoi creare costanti denominate di sola lettura con la const parola chiave ( Implementato in JavaScript 1.5 ).

Questo è quanto ho ottenuto:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script type="text/javascript">
            function Scope()
            {
                return function()
                {
                    return {Constant: 1}; //Object literal
                };
            }
            var Scope = Scope();
        </script>
    </head>
    <body>
        <script type="text/javascript">
            document.write(Scope().Constant + "<br />");

            //The following line of code has no effect and fails silently.
            Scope().Constant = 6;

            document.write(Scope().Constant + "<br />");
        </script>
    </body>
</html>

Questo approccio mi consente di estendere l'ambito per avere più di una variabile membro costante estendendo letteralmente l'oggetto.

Per dichiarare:

function globals(){
    const x1="something";
    const x2="otherthing";

    return{
      getX1=function(){
        return x1;
      },
      getX2=function(){
        return x2;
      }
    }
 }

var globalConstants=globals();

Per accedere:

globalConstants.getX1();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top