2010-12-15 6 views
3

alors ... Je suis en train d'apprendre cette nouvelle chose fermetures appelé ... nouveau pour moi .... Par intérêt académique:fermetures Javascript dans Firebug

DESCRIPTION

Lorsque je crée variable globale ou fonction dans JS - Je peux facilement les voir dans l'onglet DOM de firebug (ils sont attachés à l'objet Window). Lorsque je crée des objets - la même histoire. Je peux voir des objets dans l'onglet de Firebug DOM.

QUESTION:

Comment sur les variables et fonctions à l'intérieur des fermetures - où sont-ils attachés à? Je ne vois pas ces variables privées de fermeture dans l'onglet DOM de Firebug. Est-ce que c'est comme ça que ça doit marcher?

(function() { 
    var test1 = 'test'; //do't se it in DOM 
    function test2(){ //do't see it in DOM 
    } 
}()); 

Répondre

2

L'onglet DOM affiche uniquement les variables et les fonctions définies globalement. Il ne montre jamais de variables ou de fonctions locales. Les fermetures signifient qu'une variable locale utilisée par une fonction locale restera en mémoire aussi longtemps que la fonction elle-même restera en mémoire, au lieu d'être détruite immédiatement. Comme il s'agit d'être local, ils n'apparaissent pas dans la liste des variables globales dans l'onglet DOM.

Considérez ce qui suit:

var increment = (function(){ 
    var i = 0; 
    return function() { 
     return i++; 
    } 
    })(); 

    increment(); // should return 0 
    increment(); // should return 1 

Vous pouvez toujours voir la valeur de i, mais il est disponible à l'intérieur de la fermeture, de sorte que vous devez placer un point d'arrêt sur la ligne return i++; et chercher i dans la section 'variables locales' de l'onglet Script.

+1

ou vous pouvez ajouter "console.log (i)" avant instruction de retour. De cette façon, il enregistre la sortie au lieu d'arrêter le code. –

+1

Les fermetures ne sont pas listées sous des variables locales, c'est un contexte séparé, les versions plus récentes de firefox montrent l'objet de fermeture séparément, au moins pour les fonctions auto-appelantes. –

+0

@JuanMendes Pouvez-vous spécifier la version de Firefox que vous utilisez ou la version qui prend en charge la variable globale. – nepsdotin

0

Eh bien, c'est une vieille histoire. Les nouvelles versions de Firebug (à partir de 1.11.2) peuvent également afficher des variables de fermeture. À l'aide de la ligne de commande, entrez ce qui suit.

closure.%variable 

Ou vous pouvez utiliser les panneaux de montre DOM pour afficher les variables de fermeture en cliquant sur la flèche juste à côté dans l'onglet DOM et vérifier l'option de fermeture du salon.

Plus de détails here