|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2057
|
javascript e lo scope.. problemini..
Ciao,
ho un dubbio che non capisco :/ faccio un esempio almeno rendo il tutto di più semplice comprensione : cosi il tutto funziona correttamente : Codice:
var bottoni = document.getElementsByTagName('BUTTON');
for(var i=0; i<menu.length; i++)
{
bottoni[i].onclick = (function(){ // Definisci la funzione in cui ti salvi il valore corrente della i
var currentI = i;
return function(){ // ritorni la funzione (currentI sarà sempre diversa ad ogni iterazione perché cambia lo scope)
recinto.setLevel(currentI);
recinto.inizializzazione();
}
})();
}
Codice:
for(var i=0; i<3; i++)
{
bottoni[i].onclick = function(){
recinto.setLevel(i);
recinto.inizializzazione();
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Stai creando una funzione in un loop, che in JavaScript è una cosa generalmente sconsigliata esattamente per il "problema" che stai affrontando.
Ciò che accade, in realtà, è che nel loop stai facendo soltanto un'assegnazione, cioè una cosa del tutto simile alla seguente: Codice:
for (var i = 0; i < collection.length; ++i) {
object.property = value;
}
Il tuo primo snippet è corretto. In realtà, però potresti anche evitarti la nuova variabile currentI, visto che stai usando una IIFE, alla quale puoi passare direttamente il valore di i: Codice:
var bottoni = document.getElementsByTagName('button');
for (var i=0; i < menu.length; ++i) {
bottoni[i].onclick = (function (i) {
return function() {
recinto.setLevel(i);
recinto.inizializzazione();
};
})(i);
}
HTH
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
|
Long story short, for non ha scope come le funzioni. Quando la funzione è invocata, i viene cercata e trovata nello scope esterno ed avrà l'ultimo valore che gli è stato assegnato.
Non ragionare in termini di passaggio per valore o riferimento–che non parlando di argomenti di funzione non ha alcun senso–, bensì in termini di scope.
__________________
AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200 |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2057
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:08.




















