Цитата:
	
	
		
			 
			
				
					Сообщение от kostyanet
					(Сообщение 335827)
				 
				danik.js, нахер вообще что-то вписываете? какие-то ивенты-шмывенты. 
смысла дискуссии я не уловил. Если у функции аргументы не обозначены явным образом - значит не обозначены явным образом, а this ну просто обожает появляться неявным образом, собственно как и все прочие переменные дружеского и вражеского окружения.
 http://learn.javascript.ru/play/eG9lQ 
			
			 
		 | 
	
	
 Таки да, получается следующее:
1) если обработчик вызывается инлайново, ему надо передать this, иначе контекст будет window. Я прочёл на сайте следующее: "При создании обработчика браузером по разметке он автоматически создает функцию из его содержимого."
Если написать:
<input type="button" id="button" onclick="f()"/>
авт-ки создастся следующее:
/****что создаётся****/
document.getElementById('button').onclick = function() {
  //здесь this - это button, но к f это не имеет отношения, т.к. это просто вызов левой ф-ции в обработчике
  f();
}
/******/
function f () {
  alert(this); //выдаст окно
}
Если же явно передать this:
<input type="button" id="button" onclick="f(this)"/>
то и вызов будет другим:
/****что создаётся****/
document.getElementById('button').onclick = function() {
  //здесь this - это button, следоват-но, button и передаётся в f
  f(this);
}
/******/
function f (right_this) {
  alert(right_this); //выдаст button
}
Излюбленный пример danik.js показывает то же, явную передачу:
a.onclick = function() { alert(this) };
/****что создаётся****/
a.onclick = function() {
  //здесь this - это button, следоват-но, button и передаётся в alert
  alert(this);
}
/******/
2) если неинлайново, this передавать не надо
<input type="button" id="button">
document.getElementById('button').onclick = function() {
  //здесь this - это button, и никакой обёртки не создаётся
  alert(this);
}
//и никакой лев. ф-ции