Ci sono due versioni, presumibilmente quando l'utente clicca il primo link, avviserà "1", e il secondo collegamento, "2", ecc .:Perché una chiusura JavaScript funziona e l'altra no?
Versione 1:
<a href="#" id="link1">click me</a>
<a href="#" id="link2">click me</a>
<a href="#" id="link3">click me</a>
<a href="#" id="link4">click me</a>
<a href="#" id="link5">click me</a>
<script type="text/javascript">
for (i = 1; i <= 5; i++) {
document.getElementById('link' + i).onclick = (function() {
return function() {
var n = i;
alert(n);
return false;
}
})();
}
</script>
Version 2:
<a href="#" id="link1">click me</a>
<a href="#" id="link2">click me</a>
<a href="#" id="link3">click me</a>
<a href="#" id="link4">click me</a>
<a href="#" id="link5">click me</a>
<script type="text/javascript">
for (i = 1; i <= 5; i++) {
document.getElementById('link' + i).onclick = (function() {
var n = i;
return function() {
alert(n);
return false;
}
})();
}
</script>
La versione 1 non funziona. La versione 2 lo farà. Penso di conoscere il motivo per cui, ma vorrei confrontarmi con le spiegazioni delle altre persone sul motivo per cui la versione 1 non funziona.
dall'esame della versione 1, non crea una nuova copia di 'i' ogni volta? –
No. Nella versione 1. non sta eseguendo delle copie durante l'iterazione di foreach. Ma fa una copia quando si fa clic. –