Создает ли IE новую область для каждого тэга script?
Почему следующий HTML файл показывает название по умолчанию в IE? Другие браузеры показывают название как mytitle.
<script>
window.mylib = window.mylib || {};
mylib.title = 'mytitle';
</script>
<script>
var mylib = mylib || {};
document.title = mylib.title || 'default';
</script>
Создает ли IE отдельную область для каждого из тегов script?
И это просто ошибка или почему поведение отличается?
(тестируется в IE8 и последней версии chrome/ff/opera)
Ответы
Ответ 1
HTML <script>
теги Javascript выполняются в области window
. Таким образом, выделенные теги script выполняются в той же области.
В частности, с IE7, попробуйте не переопределять переменную во второй раз:
Вместо
var mylib = mylib || {};
использовать
mylib = window.mylib || {};
IE7, вероятно, перезаписывает определение mylib
, когда встречается var mylib
.
Ответ 2
Сфера применения не должна быть проблемой. Каждый <script>
должен оцениваться в пределах одной и той же глобальной области.
Однако window.mylib = ...
не считается фактическим объявлением в IE8. Итак, после него с var mylib
вызывает переопределение /reset до undefined
.
<script>
window.mylib = {};
</script>
<script>
console.log(typeof window.mylib); // object
</script>
<script>
var mylib;
console.log(typeof window.mylib); // undefined
</script>
Он должен работать как ожидалось при использовании var mylib
или window.mylib
. Кажется, что это просто проблема.
<script>
var mylib = mylib || {};
mylib.title = 'mytitle';
</script>
<script>
var mylib = mylib || {};
document.title = mylib.title || 'default'; // 'mytitle'
</script>
Ответ 3
Вы инициализируете window.mylib
в первом теге <script>
. Во втором теге <script>
вы инициализируете var mylib
с помощью mylib
not window.mylib
. А затем проверьте значение title
на это. Кажется, некоторые логические проблемы, если я могу понять это правильно.
<script>
привязаны к окну, поэтому не имеет значения, сколько у вас есть и в какой из них вы обращаетесь к переменным или функциям, если они правильно определены и/или инициализированы.