Локальная переменная становится глобальной?
Здравствуйте. Есть такой код:
window.onload = function () {
alert(canvas);
document.addEventListener("wheel", Wheel);
}
function Wheel (e) {
var canvas = document.getElementById('canvas');
canvas.style.top = ...;
canvas.addEventListener("transitionend", EL);
function EL() {
canvas.removeEventListener("transitionend", EL);
...
}
}
В результате, алерт выдает объект с id="canvas". Почему? Ведь canvas определяется только внутри Wheel() как локальная переменная. Спасибо. |
Цитата:
он вам все равно выдаст это элемент. В js есть возможность работать напрямую с элементами по их ид типа <input id="test" value="5" type="text"> <script>alert(test.value)</script> |
нифига себе :blink: как это? Это в спецификации языка есть? Или браузеры сотканы из уличной магии?
|
|
Цитата:
|
Цитата:
|
Цитата:
Говорят - приватная. Кстати когда браузер компилит элементы формы по их именам эта фича же всем нравится, или как? Да, пишут что тогда если есть id, его значение должно совпадать с name, иначе, пишут, неизвестно чем кончится. И насчет id. Не надо давать им такие значения, которые бы были похожи на имена переменных и типы элементов и все такое. Например id="button_next" - неправильно id="button-next" - правильно Улавливаете? Словом id="-canvas" и никто вас не будет бить по ночам. |
111,
У Вас название локальной переменной Цитата:
Измените название локальной! |
Что ж, огромное спасибо всем за ответы. Такого я от DOM не ожидал ) Век живи - век учись, все такое.
|
Цитата:
Интересно другое, что будет если из локальности window присвоить canvas=5 ? |
думал эта хрень при "use strict" не работает хотя бы, ан нет, работает.
|
kostyanet,
Речь не о конфликтах, а о путанице для начинающего. В начальной стадии нет смысла запутывать самого себя |
Цитата:
Интересно что скриптом можно расширить документ, ну там всякие вы знаете полифилы и нормализаторы пишут, а вот попробуйте-ка сузить. Ну, в принципе, наверно можно так - собрать все ид и всем им навтыкать undefined. |
| Часовой пояс GMT +3, время: 18:00. |