На днях я столкнулся с интересной проблемой и задавался вопросом, может ли кто-нибудь пролить свет на то, почему это происходит. Вот что я делаю (для целей этого примера я немного пошатнул пример):
- Я создаю глобальную область с переменной квадратной скобкой и присваиваю ей значение.
-
Позже я объявляю var с тем же именем, что и тот, который я только что создал. Примечание. Я не назначаю значение. Поскольку это переопределение одной и той же переменной, старое значение не должно переоцениваться, как описано здесь: http://www.w3schools.com/js/js_variables.asp
//create global variable with square bracket notation window['y'] = 'old'; //redeclaration of the same variable var y; if (!y) y = 'new'; alert(y); //shows New instead of Old
-
Проблема состоит в том, что старое значение действительно перегружается и в приведенном выше примере. предупреждение показывает "новое" вместо "старого". Почему?
Я предполагаю, что другой способ сформулировать мой вопрос заключается в том, как приведенный выше код отличается семантикой из приведенного ниже кода:
//create global variable
var y = 'old';
//redeclaration of the same variable
var y;
if (!y) y = 'new';
alert(y); //shows Old
Обновление 1. Основываясь на некоторых комментариях и ответах, я перефразирую этот пример, чтобы лучше отразить мою оригинальную проблему.
Создайте 2 файла javascript со следующим содержимым: Script1
//create global variable with square bracket notation
window['y'] = 'old';
Скрипт2
//redeclaration of the same variable
var y;
if (!y) y = 'new';
alert(y); //shows New instead of Old in IE
Включите эти 2 файла в свой html файл
<html>
<head></head>
<body>
<script type="text/javascript" src="my.js"></script>
<script type="text/javascript" src="my2.js"></script>
</body>
</html>
Открытие этой страницы в Firefox и Chrome предупреждает "старый", что является ожидаемым поведением. Однако в IE 8 страница будет на самом деле предупреждать "новый"
Обновить 2 вопрос: Измененная глобальная переменная javascript переопределяет старое значение в IE