Maison  >  Article  >  interface Web  >  Une question d'entretien sur les compétences de la variable JavaScript scope_javascript

Une question d'entretien sur les compétences de la variable JavaScript scope_javascript

WBOY
WBOYoriginal
2016-05-16 15:11:292052parcourir

L'éditeur estime que cette question est très utile pour comprendre la portée de JavaScript, j'ai donc à nouveau réglé mes propres idées de résolution de problèmes, dans l'espoir d'être utile aux autres.

Premier aperçu des questions de l'entretien :

var arr = [1, 2, 3];
  for (var i = 0, j; j = arr[i++];) {
    console.log(j);
  }

  console.log('---------');
  console.log(i);
  console.log('---------');
  console.log(j);
  console.log('---------');

Avant de résoudre le problème, passons d'abord en revue les connaissances liées aux champs variables en JavaScript.

Variables globales (Globales)
Les variables globales font référence à des variables accessibles n'importe où. Il existe deux situations

.

Fonction extérieure déclarée, que ce soit en utilisant ou non le mot-clé var
Déclarez-le en fonction sans utiliser le mot-clé var Bien entendu, l'instruction déclarée doit être exécutée
. Variable locale (Local)
Les variables locales ne sont accessibles qu'à l'intérieur de la fonction déclarée
Déclaré à l'intérieur de la fonction, utilisez le mot-clé var
Deux points à noter

Regardez d'abord le code :

alert(i); // 输出 undefined
 
 for (var i = 0; i < 1; i++){};
 
 alert(i); // 输出1

JavaScript n'a pas de portée d'instruction. Les variables définies dans l'instruction se propageront en dehors de l'instruction for. Dans l'exemple, i est déclaré dans l'instruction for, mais il est toujours accessible en dehors de l'instruction for
. je suis accessible avant la déclaration for, mais elle n'a pas encore été attribuée
Commençons notre résolution de problèmes

i++ est ajouté après l'utilisation de i :

Lors de sa première exécution, j=arr[0], puis i=1, console.log(j) génère 1

La deuxième fois qu'il est exécuté, j=arr[1], puis i=2, ocnsole.log(j) génère 2

La troisième fois qu'il est exécuté, j=arr[2], puis i=3, ocnsole.log(j) génère 3

La quatrième fois (ne remplit pas la condition for), j=arr[3] n'est pas défini, puis i=4, ocnsole.log(j) n'a pas de sortie et quitte la boucle for

Une fois l'instruction for exécutée, console.log(i) génère 4 à partir de l'analyse ci-dessus et console.log(j) génère undéfini

Le résultat final est :

2
---------
---------
undefined
---------

Tout le monde doit avoir compris l'analyse et les résultats ci-dessus, et nous pourrons alors commencer à tirer des conclusions.

Emprunter une question et changer celle de la question
Titre :
var arr = [1, 2, 3];

  for (var i = 0, j; j = arr[++i];) {
    console.log(j);
  }

  console.log('---------');
  console.log(i);
  console.log('---------');
  console.log(j);
  console.log('---------');

Réponse :

2
3
---------
3
---------
undefined
---------

Question empruntée et question 2 révisée
Titre :

function xxx() {
    var arr = [1, 2, 3];
    for (var i = 0, j; j = arr[i++];) {
      console.log(j);
    }
  }
  xxx();

  console.log('---------');
  console.log(i);
  console.log('---------');
  console.log(j);
  console.log('---------');

Réponse :

1
2
3
---------
报错:Uncaught ReferenceError: i is not defined

Je partage ceci avec vous, j'espère que cela vous sera utile pour comprendre la portée de JavaScript.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn