Aujourd'hui, un petit stagiaire dans l'entreprise m'a demandé la différence entre deux codes JS:
Code 1:
<script type = "text / javascript"> var a = "bonjour"; fonction test () {var a; alerte (a); a = "monde"; alerte (a); } </ script>Code 2:
<script type = "text / javascript"> var a = "bonjour"; fonction test () {alert (a); a = "monde"; alerte (a); } </ script>Je pense que c'est si simple. N'est-ce pas juste un problème de portée entre les variables globales et les variables locales? J'ai dit: "Lorsque la variable globale est dupliquée avec la variable locale, la portée de la variable locale écrasera la portée de la variable globale. Après avoir quitté la portée de la variable locale, elle reviendra à la portée de la variable globale. Ainsi, les résultats des deux codes fonctionnaient: 1) un monde indéfini 2) Bonjour World. Ensuite, j'ai compilé au hasard l'exemple suivant pour elle:
<script> var a = 1; fonction test () {alert (a); var a = 2; alerte (a); } test(); alerte (a); </cript>Quel est le résultat égal? Est-ce la sortie 1 2 1? Eh bien, je le pensais avant de lui envoyer le cas de test, mais après la sortie du test ... le résultat de l'exécution n'était pas défini 2 1. À ce moment-là, j'ai été perplexe et j'ai demandé au professeur Gu que j'avais réalisé que je ne savais pas grand-chose sur JS, alors j'ai travaillé dur pour apprendre + le test et le résumer comme suit:
1. La portée des variables JavaScript est divisée en fonction des blocs de méthode (c'est-à-dire qu'il est divisé par une paire de contreventement {} de la fonction). N'oubliez pas, c'est un bloc fonctionnel, et pour, pendant que, et si les blocs ne sont pas les critères de division de portée. Vous pouvez jeter un œil aux exemples suivants:
<Script> Function test2 () {alert ("avant pour la portée:" + i); // I ne fait pas de valeur (non non déclaré! Utilisez des variables ou des fonctions non déclarées pour lancer une erreur fatale et interrompre l'exécution du script) // À l'heure actuelle, la valeur de i est sous-alimentée pour (var i = 0; i <3; i ++) {alert ("in For Scope:" + i); // i est 0, 1, 2, et quand je suis 3, la boucle est sautée} alerte ("après pour la portée:" + i); // i est 3, notez qu'il est déjà à l'extérieur pour la portée, mais i est toujours conservé comme 3 tandis que (true) {var j = 1; casser; } alert (j); // J est 1, notez qu'il est déjà allumé pendant la portée extérieure, la valeur de j reste à 1 if (true) {var k = 1; } alert (k); // La valeur de K est 1. Notez qu'il est déjà en dehors de la portée, mais la valeur de k reste à 1} test2 (); // si (portée de la fonction extérieure) La sortie des variables i, j et k qui n'existent que dans le test2 aura un effet magique? alerte (i); //erreur! C'est vrai, c'est une erreur, car la variable i n'est pas déclarée (non assistée, distinguant la sortie de la première ligne de la fonction Test2), ce qui entraîne une erreur de script, et le programme se termine ici! alert ("Cette ligne imprimera-t-elle toujours?"); // non exécutée alerte (j); // non exécutée alerte (k); // non exécuté </cript>2. Avant l'exécution, JavaScript effectuera une analyse complète de la partie de déclaration de l'ensemble du fichier de script (y compris les variables locales) pour déterminer la portée des variables réelles. Comment comprendre? Voir l'exemple suivant:
<script> var a = 1; fonction test () {alert (a); // a est indéfini! Ce n'est pas une variable globale, car une variable locale en double a été déclarée dans la portée de la fonction (la quatrième dernière ligne du corps de fonction) et // la variable globale a est écrasée, ce qui montre que JavaScript effectuera une analyse complète de la partie de définition de l'ensemble du fichier de script avant l'exécution. Par conséquent, avant que la fonction test () soit exécutée, // la variable A dans le corps de fonction est pointée vers la variable locale interne au lieu de la variable globale externe. Mais à ce moment-là, A n'est déclaré que et n'a pas attribué de valeur, il est donc indéfini. a = 4 alerte (a); // a est 4, n'y a-t-il pas de suspense? Le A ici est toujours une variable locale! var a; // la variable locale a déclaré alerte (a); // a est toujours 4, car 4 a été affecté à A avant} test (); alerte (a); // a est 1, qui n'est pas dans la portée de la fonction, la valeur de a est la valeur de la variable globale </cript>3. Lorsque la variable globale est dupliquée avec la variable locale, la portée de la variable locale écrasera la portée de la variable globale. Après avoir quitté la portée de la variable locale, il revient à la portée de la variable globale. Lorsque la variable globale rencontre une variable locale, comment utiliser la variable globale? Utilisez Window.globalVariabbleName.
<script> var a = 1; fonction test () {alert (fenêtre.a); // a est 1, ici est une variable globale! var a = 2; // La variable locale a est définie dans cette alerte de ligne (a); // A est 2, et A ici est une variable locale! } test(); alerte (a); // a est 1, il n'est pas dans la portée de la fonction, la valeur de a est la valeur de la variable globale </cript>Bien sûr, pour plus d'articles, veuillez vous référer aux articles connexes ci-dessous.