2013-11-23 9 views
14

Ich lerne js und ich bin auf ein Beispiel gestoßen, in dem || wird verwendet, wenn eine var als Funktion erklärt:Warum verwenden? | in der Deklaration der variablen Funktion?

var Triangulation = Triangulation || (function() { 
... 

Es scheint mir, dass dies, wenn die var bereits, bevor er die Zuweisung deklariert wurde, um zu sehen ist, überprüft. Wenn ich mich im Internet umsehe, sehe ich keine anderen Beispiele, in denen dieser Ansatz verwendet wird. Was wäre ein Grund dafür sein, diesen Ansatz zu nehmen vs:

var Triangulation = function() { 
... 

Dank

+4

wahrscheinlich eine Möglichkeit, es einmal und nur einmal zu setzen? – Sico

+0

überprüfen Sie dieses ... http: //stackoverflow.com/questions/2100758/javascript-or-variable-assignment-explanation – nik

+0

'var Triangulation = Triangulation || (function() {'bedeutet nur, dass ** wenn **' Trianglulation' deklariert wird, bevor Sie zu diesem Schritt kommen, dann überspringen Sie den Schritt. ** sonst ** weiter Ausführen des Codes innerhalb der Funktion {}. –

Antwort

19

Es bedeutet, es gibt eine Chance, die triangulation Variable bereits definiert, wenn es ist, die triangulation Variable kehrt selbst, wenn diese noch nicht definiert - - Die anonyme Funktion gibt den Wert für die neue Variable triangulation zurück.

Und wichtig/sensible Sache ist die var. Es ist ein schwieriges Geschäft. Zum Beispiel:

<script> 
var triangulation = function(){return(1);}; 
</script> 

Eigentlich bedeutet:

<script> 
window.triangulation = function(){return(1);};// because "triangulation" is in global      
               // namespace and "var" in this case 
               // means nothing "local", as you may expect 
</script> 

Das nächste Mal Initialisierung var triangulation = ... wird die globale Variable überschreiben. Wenn Sie wollen es zu erhalten, müssen Sie schreiben:

var triangulation = triangulation || function(){...}; 
+7

Dieses Muster wird häufig verwendet, wenn Sie "Namespaces" erstellen = $ || {}; $ .app = $ .app || {}; $ .app.something = $ .app.etwas || {}; Dann können Sie am Anfang jeder Datei die gleichen grundlegenden Dinge einfügen, um sicherzustellen, dass Ihre Namespaces definiert sind und dass sich Ihre Definitionen nicht gegenseitig überlisten. –

2

Es prüft, ob Triangulation existiert, bevor es einen neuen Wert mit Short-circuiting zuweisen. Dies ist eine gängige Praxis, wenn Sie eine Funktion unterstützen möchten, die sich von Browsern zu Browsern unterscheidet.

Ein Beispiel ist requestAnimationFrame. Da jeder Browser ein anderes Herstellerpräfix benötigt, verwenden wir ||, um der Variablen die korrekte Methode zuzuweisen, so dass sie alle Browser unterstützt.

window.requestAnimFrame = (function(){ 
    return window.requestAnimationFrame  || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      function(callback){ 
      window.setTimeout(callback, 1000/60); 
      }; 
})(); 

//whatever exists will be assigned to window.requestAnimFrame . 
1

Dies wird oft für benannte Pakete verwendet, die ihre Implementierungen aufgeteilt zwischen mehreren Dateien haben, wenn Sie nicht unbedingt wissen (oder verwalten möchten), um die Datei Ladereihenfolge. Normalerweise würden Sie tun dies mit:

var Namespace = Namespace || {} 

In Ihrem Fall ist es nur zu verhindern, dass die Neuzuweisung der Triangulation Klasse, wenn es bereits definiert.

2

Für || Operator, JS den Wert des ersten Ausdrucks zurückgibt, die an truthy Wert
Zum Beispiel bewerten:
A || B (unter der Annahme einer leeren String ist und B ist eine ganze Zahl (12))
Der obige Ausdruck zurück 12 (dh der erster Ausdruck, der truthy Wert auswertet).

In Ihrem Szenario überprüfen wir, ob Triangulation bereits deklariert ist, dann müssen wir den Funktionsausdruck berechnen und ihn Triangulation zuweisen.
var Triangulation = Triangulation || (Function() {

-1

Es gibt verschiedene Arten von Operatoren wir in Javascript verwendet haben, als wie & & (und) || (oder) und! (Nicht) Operatoren.

Diese Operatoren auch als bekannt sind logische Operatoren.

logische Operatoren werden in erster Linie zur Steuerung Programmablauf verwendet. In der Regel wird man sie als ein Teil eines finden, wenn eine Weile, oder eine andere Steueranweisung.

der Operator || verwendet wird, um zu bestimmen, ob eine der Bedingungen zutrifft:Beispiel:

if (x == 5 || y == 5) { .... .... }

Dank.

+0

hat nichts mit der Frage zu tun. – oligofren

Verwandte Themen