Solo per curiosità ..Implicitamente globale "voce" variabile - differenza tra Internet Explorer e FireFox
ho questo JS Codice:
var someExternalArray = [{id: 1, name: 'a'}, {id: 2, name: 'b'}, {id: 3, name: 'c'}];
var newArray = []
//var item;
for (var i = 0; i < someExternalArray.length; i++){
item = new Object();
item.id = someExternalArray[i].id;
item.name = someExternalArray[i].name;
newArray.push(item);
}
alert('0:' + newArray[0].name + ',1:' + newArray[1].name + ',2:' + newArray[2].name);
Avviso della commentato var item
che lascia il ciclo con implicitamente dichiarata item
variabile.
Se eseguo questo codice su FireFox, il risultato di allerta è:
0:a,1:b,2:c
Se corro lo stesso codice in Internet Explorer, il risultato è:
0:c,1:c,2:c
Ecco jsfiddle: https://jsfiddle.net/fvu9gb26/
Naturalmente, quando taccio il commento allo var item
funziona allo stesso modo in ogni browser.
Qualcuno sa perché questa differenza si verifica? Grazie.
Grazie. Questa è stata davvero una coincidenza che ci siamo dimenticati di dichiarare 'var item' come sempre dichiariamo variabile nel nostro progetto e non fare mai affidamento su dichiarazioni implicite. E secondo, che questa variabile ha lo stesso nome di un metodo nativo su 'window object' che esiste solo in IE..wow :) –