2017-06-15 1 views
0

Ich lerne Javascript, und hatte diese Frage. Hier ist ein Beispielcode:JavaScript: Zugriff auf Variable/Eigenschaft der mittleren/äußeren Funktionen in verschachtelten Funktionen

var xq = false; 
 
var fooyy = function ttt() { 
 
    var xq = false; 
 
    baryy = function() { 
 
    var xq = true; 
 
    console.log(xq); 
 
    console.log(ttt); 
 
    console.log(fooyy); 
 
    console.log(ttt.xq); 
 
    console.log(fooyy.xq); 
 
    console.log(window.xq); 
 
    }(); 
 
}; 
 

 
fooyy(); 
 
console.log(xq); 
 
console.log(fooyy.xq);

am Ausgang Sehen, meine Frage ist, ist es so bedeuten, dass von einer inneren verschachtelten Funktion, Eigenschaften und Variablen der äußeren Funktionen nicht zugegriffen werden können (sowohl in den Fällen mit dem gleichen Namen und sonst)? Oder wenn sie können, könnten Sie erklären, wie und warum? (Ich sehe, dass die lokalen und globalen Variablen zugänglich sind) Danke!

+3

Siehe [Verschlüsse] (https://developer.mozilla.org/en/docs/Web/JavaScript/Closures) – James

Antwort

1

bedeutet es, dass von einer inneren geschachtelten Funktion auf Eigenschaften und Variablen äußerer Funktionen nicht zugegriffen werden kann?

Nein. Das sind keine Eigenschaften, sie sind Variablen. Sie haben versucht, auf sie als Eigenschaften der Funktionen zuzugreifen, die nicht existieren.

Ich sehe, dass die lokalen und globalen Variablen zugänglich sind. Was ist mit Variablen äußerer Funktionen (sowohl im Falle des gleichen Namens als auch sonst)?

Sie können zugegriffen werden, solange sie unterschiedliche Namen haben. Dies ist bekannt als lexical scope und funktioniert auch, nachdem die äußere Funktion zurückgegeben wurde - die innere wird eine closure bilden. Sie können auf sie einfach durch ihren Namen zugreifen, sie sind lokale Variablen.

Wenn Sie haben jedoch eine Variable mit dem gleichen Namen in Ihrem lokalen Bereich, wie in Ihrem Beispiel der Variable xq, dass lokaler Variable Schatten die Variable von dem äußeren Umfang und unzugänglich machen. Wenn Sie darauf zugreifen möchten, müssen Sie eine der beiden Variablen umbenennen.

0

Was Sie dort haben, ist eine closure, schön in dieser SO question erklärt.

Schauen Sie sich auch diese SO question, wo Menschen viel Mühe investiert, um zu erklären, was eine Schließung ist.

Kurz gesagt, baryy Funktion hat Zugriff auf äußere Variablen.

Verwandte Themen