(tworząc oddzielny pytanie po komentarzach na ten temat: Javascript redeclared global variable overrides old value)Redeclared javascript zmienna globalna zastępuje stary wartość w IE
tworzę globalnie scoped zmienną używając notacji kwadratowej uchwytu i przypisując mu wartość wewnątrz pliku zewnętrznego js .
W innym pliku js deklaruję var o tej samej nazwie, co właśnie utworzony powyżej. Uwaga Nie przypisuję wartości. Ponieważ jest to ponowna deklaracja tej samej zmiennej stara wartość nie powinna być nadpisane jak opisano tutaj: http://www.w3schools.com/js/js_variables.asp
utworzyć 2 pliki javascript o następującej treści: Script1
//create global variable with square bracket notation
window['y'] = 'old';
Script2
//redeclaration of the same variable
var y;
if (!y) y = 'new';
alert(y); //shows New instead of Old in IE
Dołącz te 2 pliki do pliku html
<html>
<head></head>
<body>
<script type="text/javascript" src="my.js"></script>
<script type="text/javascript" src="my2.js"></script>
</body>
</html>
Otwarcie tej strony w Firefoksie i starych alertach Chrome "oczekiwane zachowanie". Jednak w IE 8 strona będzie automatycznie powiadamiać "nowe"
Wszelkie pomysły na to, dlaczego tak się dzieje w IE?
Co się stanie, jeśli wstawisz cały kod w pliku HTML? Daje ten sam wynik (stary) dla mnie w Firefox 3.5.8, Chrome 5.0.342.7 i Konqueror 4.3.5. Przydatne będą wyniki dla innych przeglądarek. –
Jeśli umieścisz cały kod w jednym pliku, nastąpi jego wciągnięcie, a problem prawdopodobnie nie będzie obecny. –
Tak, jeśli umieścisz cały kod w jednym miejscu, alert wyświetli "stary" we wszystkich przeglądarkach. –