Disons que j'ai cette fonction anonyme:
(function(window){
var private = 'private msg';
function sayit() {
alert(private) // works
}
document.body.onclick = sayit; // works
})(window);
// private shouldn't be accessible here
Est-ce ainsi que JavaScript devrait se comporter?
Autrement dit, il n’existe aucun moyen d’accéder à private
de n’importe où en dehors de cette fonction anonyme?
Si oui, est-il possible de trouver une sorte de bidouille pour accéder à private
de l'extérieur, en laissant le code tel quel?
Oui, c'est comme ça que Javascript vous permet d'avoir des variables "privées" (cachées dans une portée de fonction).
Non, il n'y a pas de hack disponible pour accéder à des variables telles que private
sans réécrire le code.
Les variables définies avec var
dans une fonction sont accessibles uniquement à partir de cette fonction.
D'accord. J? ai compris.
(function(window){
var alert_original = window.alert;
window.alert = function(data) {
window.extracted = data;
alert_original(data);
};
})(window);
(function(window){
var private = 'private msg';
function sayit() {
alert(private) // works
}
document.body.onclick = sayit; // works
})(window);
Après avoir cliqué sur body, vous pouvez obtenir un 'msg privé' depuis extracted
.
Ils ne sont pas conçus comme des variables "privées"; c'est comme ça que fonctionnent les fermetures. Vous pouvez faire la même chose en Perl et en Python, à tout le moins, et probablement dans de nombreuses autres langues avec des fermetures et une portée lexicale.
Des débogueurs comme Firebug ou Chrome Inspector peuvent toujours vous montrer la pile entière à tout moment (y compris les variables fermées), mais à part cela et sans changer le code d'origine, je pense que vous n'avez pas de chance.
Peut-être que si tu nous disais ton problème actuel ... :)
C'est tout l'intérêt d'avoir des variables de portée et privées
Non plus
Définir la valeur privée sur une variable globale?
ou
déclarer la variable dehors