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.