2016-04-03 4 views
1

Verwenden von Knoten.Best Practice, um globale Variablen in Node zu vermeiden?

Versuchen, globale Variablen zu vermeiden, aber ich muss eine Variable (Ganzzahl) zwischen zwei Funktionen teilen, die nicht verschachtelt sind. Beide Funktionen werden direkt unter dem globalen Geltungsbereich deklariert.

Wird so etwas als eine gute Übung für das, was ich erreichen möchte, angesehen? Wenn nicht, gibt es ein besseres Muster zu folgen?

function doStuffWithDataFromEventListener(){   
    var a = inner2().num; 
}(); 

var fakeListener = function(){ //make believe event listener that is only called once. 
    var num = 7; 
    return {num: num}; 
}; 
+0

Warum nicht '7 'direkt zurück? – elclanrs

+2

Das Aufrufen einer Funktion, die einen Wert zurückgibt, löst Ihr globales Problem nicht, weil Sie noch 'globalNum' haben, was Sie hätten, wenn Sie' var globalNum = 7; '. Du könntest deinen Code in ein IIFE einpacken und dann würde nichts zu global werden. – Andy

+0

@elclanrs Ich hatte den Eindruck, dass Objekte als Referenzen zurückgegeben werden, und Primitive als Werte zurückgegeben werden, – cheesenthusiast

Antwort

0

das Modul Muster verwenden:

// Global scope 

(function(){ 

    // Function (module) scope 

    var x = 5; // Module level (not global) variable 


    function a(){ 
     return ++x; 
    } 

    function b(){ 
     return ++x; 
    } 

    a(); // 6 
    b(); // 7 

}()); 
0

Es gibt mehrere Möglichkeiten/steuern globale Variablen zu verhindern, ist eine Verschlussfunktion zu schaffen und dort den gesamten Code setzen. Der gesamte Code wird als anonyme Funktion im DOM gespeichert. Sie können dieser Funktion auch einen Namen geben, damit sie einfacher zu testen ist. Sie können auch ein globales Objekt erstellen und alle Ihre Methoden, Variablen und Eigenschaften daran anhängen. Ich bin sicher, du hast das schon mal gesehen.

var myAppObj = myAppObj || {}; 
myAppObj.name = "tommy"; 
MyAppObj.odStuffFunc = function() { 
     // do stuff 
};