Maison >interface Web >js tutoriel >Discussion sur le passage des paramètres de fermeture javascript et la liaison de boucles d'événements examples_javascript skills

Discussion sur le passage des paramètres de fermeture javascript et la liaison de boucles d'événements examples_javascript skills

WBOY
WBOYoriginal
2016-05-16 16:52:011056parcourir

Aujourd'hui, j'ai vu une question javascript qui reliait les événements dans une boucle selon le bon sens, mais le résultat n'était pas celui que je souhaitais.

Copier le code Le code est le suivant :




link
<script> '); <br>for ( var i = as.length; i--; ) { <br>as[i].onclick = function() { <br>alert(i); <br>return false; 🎜>} <br>} <br></script>


1. Lorsque vous cliquez sur le lien dans ce code, les i contextuels sont tous -1. Pourquoi ?

Pour faire simple, il s'agit d'un problème de portée de variable de fonction. Si function() { alert(i); return false; est considérée comme une fonction a(); a(), mais il est utilisé en interne, j'ai donc cherché à l'extérieur et trouvé le i défini dans la boucle for. L'événement click a commencé à être exécuté après la fin de la boucle for. Après l'exécution, la valeur de i est devenue -. 1 ; donc à chaque fois qu'il apparaît, c'est -1 ;

2. La boucle for avec 2 paramètres n'est pas non plus courante ! Embrouiller?

 for (instruction 1, instruction 2, instruction 3) {

  //todo

 }

a.for condition de boucle

D'une manière générale, l'instruction 1, l'instruction 2 et l'instruction 3 sont toutes facultatives.

b. Déclaration 2 :

Habituellement, la déclaration 2 est utilisée pour évaluer les conditions des variables initiales.

La déclaration 2 est également facultative.

Si l'instruction 2 renvoie vrai, la boucle recommencera, si elle renvoie faux, la boucle se terminera.

Astuce : Si vous omettez l'instruction 2, vous devez prévoir une pause à l'intérieur de la boucle. Sinon, le cycle ne peut pas être arrêté. Cela peut faire planter le navigateur.

c. Concernant le i--jugement :

Lorsque l'on juge i--vrai/faux, i est d'abord jugé, puis i-- est calculé. Lors de la saisie du dernier jugement de i--, lorsque i==0 a été réellement jugé, i-- a été exécuté à nouveau après le jugement et la boucle for s'est terminée, donc la valeur de i est devenue -1 ; var i = 1;

 !!i--;//ture

Solution :




Copier le code
Le code est le suivant : var as = document.getElementsByTagName('a'); for ( var i = as.length; i--; ) {
(function (i){
as[i].onclick = function() {
alert(i);
return false;
}
})(i)
}


Ou :



Copier le code
Le code est le suivant : var as = document.getElementsByTagName('a'); for ( var i = as.length; i--; ) {
var a = function(i){
as[ je].onclick = function( ) {
alert(i);
return false;
}
a(i);


D'autres internautes l'ont résolu dans la démonstration de la méthode 7 :



Copier le code

Le code est le suivant : < ;head> title>Démonstration de clôture