Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.05.2015, 23:37
111 111 вне форума
Интересующийся
Отправить личное сообщение для 111 Посмотреть профиль Найти все сообщения от 111
 
Регистрация: 24.02.2014
Сообщений: 10

Локальная переменная становится глобальной?
Здравствуйте. Есть такой код:

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() как локальная переменная.
Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 28.05.2015, 00:50
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от 111
Почему?
Потому как если вы уберете
var canvas = document.getElementById('canvas');
он вам все равно выдаст это элемент.
В js есть возможность работать напрямую с элементами по их ид типа
<input id="test" value="5" type="text">
<script>alert(test.value)</script>
Ответить с цитированием
  #3 (permalink)  
Старый 28.05.2015, 01:18
111 111 вне форума
Интересующийся
Отправить личное сообщение для 111 Посмотреть профиль Найти все сообщения от 111
 
Регистрация: 24.02.2014
Сообщений: 10

нифига себе как это? Это в спецификации языка есть? Или браузеры сотканы из уличной магии?
Ответить с цитированием
  #4 (permalink)  
Старый 28.05.2015, 01:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

https://learn.javascript.ru/variables
Ответить с цитированием
  #5 (permalink)  
Старый 28.05.2015, 07:16
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от 111
нифига себе
Это не ваша переменная, это просто объект из DOM.
Ответить с цитированием
  #6 (permalink)  
Старый 28.05.2015, 07:22
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от Poznakomlus
В js есть возможность работать напрямую с элементами по их ид типа
Не в js, в DOM'е. Что браузер сочтет необходимым скомпилить, то и сочтет. Такое же обсуждение http://stackoverflow.com/questions/3...obal-variables
Ответить с цитированием
  #7 (permalink)  
Старый 28.05.2015, 07:28
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от 111
как локальная переменная.
Они все локальные, просто у каждой своя локальность. У глобальной локальность window. window может быть больше 1 штуки.

Говорят - приватная.

Кстати когда браузер компилит элементы формы по их именам эта фича же всем нравится, или как? Да, пишут что тогда если есть id, его значение должно совпадать с name, иначе, пишут, неизвестно чем кончится.

И насчет id. Не надо давать им такие значения, которые бы были похожи на имена переменных и типы элементов и все такое.

Например

id="button_next" - неправильно
id="button-next" - правильно

Улавливаете?

Словом id="-canvas" и никто вас не будет бить по ночам.

Последний раз редактировалось kostyanet, 28.05.2015 в 07:36.
Ответить с цитированием
  #8 (permalink)  
Старый 28.05.2015, 13:40
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

111,
У Вас название локальной переменной
Цитата:
var canvas = document.getElementById('canvas');
Идентично уже глобальной переменной ID
Измените название локальной!
Ответить с цитированием
  #9 (permalink)  
Старый 28.05.2015, 14:22
111 111 вне форума
Интересующийся
Отправить личное сообщение для 111 Посмотреть профиль Найти все сообщения от 111
 
Регистрация: 24.02.2014
Сообщений: 10

Что ж, огромное спасибо всем за ответы. Такого я от DOM не ожидал ) Век живи - век учись, все такое.
Ответить с цитированием
  #10 (permalink)  
Старый 28.05.2015, 14:34
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от Deff
Измените название локальной!
В обозначенном контексте нет ингресса нет конфликта, ничего менять не обязательно.

Интересно другое, что будет если из локальности window присвоить

canvas=5

?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменная и select Navilsor Элементы интерфейса 17 23.01.2015 09:28
Почему переменная не может быть глобальной? LeD4eG Общие вопросы Javascript 4 25.04.2012 05:51
Переменная после отправки данных lukingnu AJAX и COMET 0 19.03.2011 20:24
Как сделать локальную переменную глобальной?? Дмитрий Общие вопросы Javascript 8 02.11.2010 03:33
Переменная как значение функции. Jurasmi Общие вопросы Javascript 7 22.04.2010 12:45