2016-11-10 6 views
-2

Gibt es jemanden versuchen oder wissen, wie man Zugang zu Variablen in anonymer Funktion bekommen? „Bye“ bekommen Wert in diesem BeispielJavascript IIFE - Hintertür?

Beispiel

var test = "Hi"; 

(function() { 
    var test = "Bye"; 

    // Outputs "Bye" 
    console.log(test); 
})(); 

// Outputs "Hi" 
console.log(test); 

Wie Sie letztes Protokoll return „Hallo“ sehen, aber ich will „Bye“ Wer weiß, Art und Weise bekommen ??

+1

loswerden der 'var' – epascarello

+3

Sie können nicht ohne Globals oder Rückrufe, das ist der springende Punkt. Siehe auch http://stackoverflow.com/questions/14373475/ –

Antwort

0

Die einzige Möglichkeit, das zu tun, besteht darin, die Variable nicht innerhalb des Bereichs der anonymen Funktion neu zu erstellen.

var test = "Hi"; 
 

 
(function() { 
 
    test = "Bye"; // notice no "var", meaning it uses the existing variable 
 

 
    // Outputs "Bye" 
 
    console.log(test); 
 
})(); 
 

 
// Outputs "Bye" 
 
console.log(test);

+0

Ich nehme an, dass ich die Funktion nicht ändern kann. – FullStackYeah

+0

Dann haben Sie keinen Zugriff auf eine Variable innerhalb deklariert mit lokalen Bereich (bei Verwendung von 'var') – Archer

2

eine Funktion Laufen schafft einen Rahmen; "Tschüss" ist in diesem Bereich definiert; und dieser Bereich ist nie von außerhalb der Funktion sichtbar.

Wenn Sie Zugriff auf das IIFE haben, können Sie es so ändern, dass es diese Variable in den externen Gültigkeitsbereich exportiert.

Wenn diese IIFE innerhalb einer benannten Funktion in der gleichen Quer Herkunft als Ihr Code ist, können Sie die äußere Funktion anzeigen kann:

var toto = function() { 
    var test = "Hi"; 

    (function() { 
     var test = "Bye"; 

     // Outputs "Bye" 
     console.log(test); 
    })(); 

    // Outputs "Hi" 
    console.log(test);  
} 

console.log(toto); 

Außerhalb von diesen Fällen kann nichts getan werden; von Entwurf. Auch die herstellerübergreifende Einschränkung der Funktionscodeanzeige verhindert, dass Sie auf Code zugreifen, der Ihnen nicht gehört. Kluge Leute haben das durchdacht; Ich bezweifle, dass eine Hintertür existiert.

+0

Yuup ich weiß, aber ich versuche, Hintertür zu finden, um dies zu tun :) – FullStackYeah

+0

@FullStackYeah MITM –