Frage

Ist es möglich, Konstanten in Javascript zu simulieren mit Schließungen? Wenn ja, können Sie bitte liefern Sie mich mit einem Beispiel?

War es hilfreich?

Lösung

Firefox und Chrome unterstützen beide die const Stichwort. IE nicht. Also, wenn Sie Konstanten brauchen und müssen nicht IE unterstützen, ist const keine schlechte Wahl. Beachten Sie aber, produziert weder Browser ein Laufzeitfehler, wenn ein Wert zu einem const zugeordnet ist; die Werte lediglich bleibt unverändert.

Ansonsten müssen Sie Funktionen verwenden, um Konstanten zu definieren, die nicht geändert werden können:

function PI() { return 3.14159; }

var area = radius*radius * PI();

Natürlich könnten Sie einfach Code schreiben, der nie bestimmte Variablen modifiziert, und vielleicht ein Benennungsschema für solche Variablen schaffen, so dass Sie erkennen, dass sie nie geändert werden müssen ...

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

Eine weitere Option für „Simulation“ Konstanten sein würde, die Eigenschaft Definition Funktion zu nutzen in einigen Browsern definieren schreibgeschützte Eigenschaften auf einem Objekt. Natürlich, da der Browser unterstützt Eigenschaftsdefinitionen nicht IE enthält, das nicht wirklich helfen ... (beachten Sie, dass IE 8 Eigenschaftsdefinitionen unterstützt nach einer Mode ... aber nicht auf JavaScript-Objekten)

Schließlich in sehr erfundene Szenarien Sie Funktionsargumente als Konstanten verwenden könnten (vielleicht ist das, was Sie von dachten, wenn Sie Verschlüsse vorgeschlagen?). Während sie als Variablen verhalten, bleiben sie auf die Funktion scoped in dem sie definiert sind und die Werte können daher nicht durch Variablen mit dem gleichen Namen außerhalb der Funktion, in der sie geändert gehalten beeinflussen:

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

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

Beachten Sie, dass etwas ähnliches wie dies häufig von jQuery Plugins verwendet , aber für das Gegenteil Grund: jQuery-Code wird mit der $ Stenografie in der Regel geschrieben auf das jQuery-Objekt zu verweisen, aber die Bibliothek sollte, auch wenn ein anderer Code dieses Symbol zu arbeiten neu definiert; von Bibliothek Einwickeln und Plugin-Code in anonymen Funktionen mit einem $ Parameter und dann in jQuery als Argument übergibt, wird der Code von Änderungen isoliert andere Bibliotheken auf den Wert von $ später machen könnten.


Siehe auch: Gibt es Konstanten in Javascript

?

Andere Tipps

können Sie erstellen schreibgeschützt, benannte Konstanten mit dem Schlüsselwort const ( Implementiert in JavaScript 1.5 ).

Das ist so weit ich habe:

<!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>

Dieser Ansatz ermöglicht es mir, den Anwendungsbereich zu erweitern mehr als eine konstante Membervariable zu haben, durch die Objektliteral erstrecken.

deklarieren:

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

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

var globalConstants=globals();

Um Zugang:

globalConstants.getX1();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top