JavaScript: Zugriff auf Variablen innerhalb einer anonymen Funktion von außen
Sagen, dass ich diese anonyme Funktion:
(function(window){
var private = 'private msg';
function sayit() {
alert(private) //works
}
document.body.onclick = sayit; //works
})(window);
//private shouldn't be accessible here
Ist dies, wie JavaScript Verhalten soll?
Ist, gibt es keine Möglichkeit zum Zugriff auf private
von überall außerhalb der anonymen Funktion?
Wenn dem so ist, ist es möglich, zu finden irgendeine Art von hack Zugriff auf private
von außen, verlassen Sie den code so, wie es ist?
InformationsquelleAutor der Frage steve | 2013-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, dies ist, wie Javascript können Sie haben 'private' Variablen (verborgen in einer Funktion Gültigkeitsbereich).
Nein, es gibt keinen hack zur Verfügung, um auf Variablen zuzugreifen, wie
private
ohne neu zu schreiben den code.Definierten Variablen mit
var
innerhalb einer Funktion zugegriffen werden kann nur innerhalb der Funktion.InformationsquelleAutor der Antwort Faiz
Ok. Ich habe es.
Nachdem Sie auf Körper, die Sie bekommen können private msg' aus
extracted
InformationsquelleAutor der Antwort SangYeob Bono Yu
Sie sind nicht gedacht als "private" Variablen; das ist nur, wie Verschlüsse arbeiten. Sie können das gleiche tun in Perl und Python, zumindest, und wahrscheinlich sehr viele andere Sprachen mit closures und lexikalische scoping.
Debugger wie Firebug oder die Chrome-Inspektor können immer noch zeigen Sie den gesamten Stapel an jeder Stelle (einschließlich geschlossen-über Variablen), aber andere als das, und ohne änderung der original-code, ich glaube, Sie sind aus Glück heraus.
Vielleicht, wenn du uns deinen eigentlichen problem... 🙂
InformationsquelleAutor der Antwort Eevee
Das ist der ganze Punkt, der mit Umfang und private Variablen
Entweder
Legen Sie die private value auf eine Globale variable?
oder
deklarieren Sie die variable außerhalb
InformationsquelleAutor der Antwort gurvinder372
Hätte man etwas wie das hier tun:
InformationsquelleAutor der Antwort petermk