2013-03-07 1 views
5

Je me demande si un bloc javascript/fonction est toujours disponible une fois chargé. Parce que j'ai testé quelque chose et maintenant je suis un peu confus. J'ai défini un bloc de script dans un div. Le bloc de script a une fonction de gestion d'événements pour qu'un élément recharge le div avec ajax. L'appel ajax retourne html clair de la div et le remplace par un courant. Mais cela signifie remplacer le script qui fait l'exécution aussi. J'ai pensé que le script aurait été coupé de l'exécution après l'instruction de remplacement. Mais ce n'est pas le cas. Les lignes de code après l'instruction de remplacement ont été exécutées Comment fonctionne cette fonctionnalité. Comment décrivez-vous la durée de vie d'un bloc de script?Comment connaître la durée de vie d'un bloc de script ou d'un code javascript?

Répondre

8

Lorsque le code contenu dans un élément script est évalué, le résultat de cette évaluation de code devient une partie de l'environnement d'exécution de la page. La suppression de l'élément script ne supprime pas les structures résultantes (fonctions, etc.) de l'environnement. Par conséquent, si le script définit des fonctions ou connecte des gestionnaires d'événements à des éléments ou crée de nouvelles propriétés sur des objets existants (y compris l'objet global), ces fonctions, gestionnaires et propriétés restent en mémoire, même si le script les définit supprimé du DOM (soumis à la récupération de place JavaScript habituelle, par exemple, les objets non référencés n'importe où sont éligibles pour GC, mais l'élément script n'a aucune incidence sur cela). L'élément script est simplement un mécanisme permettant de transmettre le code au navigateur.

+0

Merci pour la réponse. J'ai une autre question. Après avoir rechargé div, le même bloc de script avec exactement les mêmes fonctions a été chargé. Alors sont-ils dublés ou remplacés ou ignorés? –

+1

@HalilIbrahim: Le code est à nouveau exécuté. Si vous avez des fonctions déclarées à portée globale, celles déjà existantes seront remplacées par de nouvelles. Si vous avez des variables globales déclarées * sans * initialisateurs (donc, juste 'var foo;' pas 'var foo = 42;'), puisque la variable est déjà déclarée, la seconde déclaration est ignorée. Si vous avez des initialiseurs ou des affectations (donc, 'var foo = 42;' ou simplement 'foo = 42;'), ceux-ci sont exécutés à nouveau et donc 'foo' est défini (back) à' 42'. Etc. Tous les effets de l'exécution du code une seconde (troisième, quatrième) fois se produisent. –

+0

@Crowder: Merci pour la réponse. –