2017-04-13 3 views
0

Ich habe gerade angefangen, in Javascript zu entwickeln, und habe auf Umfang und Ausführungskontext gelesen. Ich frage mich, ob es einen Unterschied zwischen diesen:Javascript - Unterschied zwischen Funktionsdeklarationen

function fun1() { 
    var x = 1; 

    function fun2() { 
     x = x*2; 
     alert(x); 
    } 
} 

und:

function fun1() { 
    var x = 1; 
    fun2(x); 
} 

function fun2 (x) { 
    x = x*2; 
    alert(x); 
} 

Wäre es Gründe geben, einen über den anderen zu bedienen? Haben sie irgendwelche Auswirkungen auf die Leistung/Sicherheit (oder andere unerwartete Auswirkungen für Anfänger-JS-Entwickler)?

+0

Nun ... es ist unmöglich, 'fun2' im ersten Beispiel zu nennen. – Quentin

+0

Zweites Beispiel ist besser für die Wiederverwendbarkeit. Jetzt können Sie die Funktion ** fun2 ** in anderen Funktionen erneut aufrufen. – user3004449

+0

@Quentin Von außen unmöglich 'fun1', drinnen ist es nicht. – Arg0n

Antwort

0

Wenn wir über Ihre erste Annäherung sprechen, ist es nicht möglich, fun2 anzurufen, weil Sie es in fun1 eingeschlossen haben und sein Bereich lokal ist. Allerdings können Sie Ihre fun1 ammend fun2 rufen Sie wie folgt vor:

var fun1 = (function(){ 

    var x = 1; 

    var fun2 = function(){ 
     x = x*2; 
     alert(x); 
    }; 

    return { 
     fun2: fun2 
    } 

})(); 

Die obige return-Anweisung wird Ihre fun2 als public Umfang machen, dass Sie es mit dem fun1 Objekt aufrufen kann wie folgt:

fun1.fun2(); 

Bitte beachten Sie, dass die Variable x privat ist und nur innerhalb der fun1 Funktion zugänglich ist. Wenn Sie mit fun1.x darauf zugreifen müssen, müssen Sie es in Ihrem fun1 zurückgeben, da ich fun2 zurückgegeben habe.

Dies wird modular or enclosed pattern genannt. Dadurch können wir eine Verkapselung erreichen.

Wenn wir über Ihren zweiten Ansatz sprechen, d. H. Ziemlich einfach, ruft Ihr fun1fun2. Ich hoffe, es klärt das Konzept.

2

Der Hauptunterschied besteht darin, dass im ersten Fall fun2 nur im Bereich fun1 verfügbar sein wird. Im zweiten Fall sind beide Funktionen im Gültigkeitsbereich verfügbar. Ihre Definition lautet

0

In Javascript wird der Gültigkeitsbereich durch die umschließende Funktion definiert. Das heißt, innerhalb einer Funktion definierter Code ist außerhalb der Funktion nicht sichtbar.

Also, in Ihrem ersten Beispiel func2 in innerhalb func1 definiert und ist somit sichtbar nur innen func1.

In Ihrem zweiten Beispiel ist es im globalen Gültigkeitsbereich (das window Objekt, wenn in einem Browser ausgeführt wird) definiert und als solches kann von überall aufrufbar sein, wie func1.

Verwandte Themen