Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 1. Prendiamo un array, in cui vogliamo inserire una funzione al cui interno inserisco:
- a - una funzione che ritorna un nome
- b - una stringa rappresentante un nome
- */
- var array = [];
- /*
- 2. Ipotizziamo di avere un array di nomi da cui prelevare il nome da inserire nell'array al punto 1
- */
- var nomi = ['Marco', 'Laura', 'Assunta'];
- /*
- 3. Creiamo un ciclo for che acceda ai nomi e:
- a - inserisca una funzione che ritorna il nome i-esimo del ciclo
- b - inserisca una stringa rappresentante il nome i-esimo del ciclo
- */
- for(var i = 0; i < 3; i++){
- // Punto a
- array.push(function(){
- var nome = nomi[i];
- return nome;
- });
- // Punto b
- array.push(nomi[i]);
- }
- /*
- 4. Utilizzo il forEach (metodo di Array) per accedere ai valori del mio array,
- facendo attenzione se sto esaminando un elemento puntuale (stringa) o una funzione e ne
- stampo il valore. Faccio uso dell'operatore ternario: condizione ? true : false;
- */
- array.forEach(function(elem){
- typeof elem === 'function' ? console.log(elem()) : console.log(elem);
- });
- /* RISULTATO */
- /*
- undefined
- Marco
- undefined
- Laura
- undefined
- Assunta
- */
- /*
- Mentre il punto b funziona, in quanto il valore del nome i-esimo è catturato nell'istante i-esimo del mio ciclo for,
- il punto a crea una chiusura sulla funzione che inserisco nell'array che prenderà "vita" solo nel momento della sua
- esecuzione in cui il valore i è quello che ha assunto a fine ciclo, ovvero un valore che esce dal range della dimensione
- dell'array, ritornando pertanto un valore undefined.
- */
- /* SOLUZIONI */
- /*
- // SOLUZIONE 1: utilizzo una costante. Avrò n costanti quante le iterazioni del ciclo
- for(var i = 0; i < 3; i++){
- const k = i;
- array.push(function(){
- var nome = nomi[k];
- return nome;
- });
- array.push(nomi[i]);
- }
- // SOLUZIONE 2: utilizzo let. Let crea una variabile di scope a livello di blocco, per cui ad ogni iterazione è come se
- avessi una nuova i
- for(let i = 0; i < 3; i++){
- array.push(function(){
- var nome = nomi[i];
- return nome;
- });
- array.push(nomi[i]);
- }
- // SOLUZIONE 3: creo un nuovo SCOPE grazie ad una funzione
- function inserisciNome(nome){
- array.push(function(){
- return nome;
- });
- }
- for(var i = 0; i < 3; i++){
- inserisciNome(nomi[i]);
- array.push(nomi[i]);
- }
- // VARIANTE:
- function inserisciNome(i){
- array.push(function(){
- return nomi[i];
- });
- }
- for(var i = 0; i < 3; i++){
- inserisciNome(i);
- array.push(nomi[i]);
- }
- // SOLUZIONE 4: Utilizzo una IIFE che crea un nuovo SCOPE
- for(var i = 0; i < 3; i++){
- array.push((function(i){
- var nome = nomi[i];
- return nome;
- })(i));
- array.push(nomi[i]);
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement