Не работает замыкание
Есть код который ставит алерты на кнопки:
for (var i = 0; i < button.length; i++) button[i].onclick = function () { alert(i); } Если его переписать: for (var i = 0; i < button.length; i++) button[i].onclick = function (i) { alert(i); } то вместо последнего i выводит obeject mouseevent почему так? |
Цитата:
Но у тебя нет замыкания. Цитата:
А вот пример замыкания...
for (var i = 0; i < button.length; i++)
button[i].onclick = (function (N) {
return function(){alert(N);};
})(i);
|
Цитата:
<button id="button">Нажми Alt+Shift+Click на мне!</button>
<script>
button.onclick = function(event) {
if (event.altKey && event.shiftKey) {
alert('Ура!');
}
};
</script>
https://learn.javascript.ru/mouse-events-basics Только у тебя вместо event - i... |
А почему так и должно быть? Почему поведение функции так меняется из переданного аргумента?
|
И действительно помогло. Из-за одного let всё встало на свои места. Интересно почему?
|
Rise, вот он поменял var на let и всё. А во времена до let, это заставило бы его разобраться как таки устроен js и как с ним правильно работать, что помогло бы сильно в будущем. Эх.
jsdump, совет, идете в учебник на этом сайте и перечитывайте главу про замыкания до тех пор пока не въедите, иначе постоянно будете спотыкаться. |
Цитата:
Значит самое время начать читать учебник по JS... Одну из ссылок я тебе уже дал выше. ;) |
Цитата:
https://javascript.ru/tutorial/event...-sobytie-event Цитата:
Просто ты не знаешь основ обработки событий, потому все, что происходит кажется тебе загадкой... |
Почему не работает код:
var i=0;
{
let i=-5;
for (var i; i < button.length; i++){}
alert(i);
}
alert(i);
Разве нельзя объявлять var после let? |
Цитата:
Правда не факт что она потом будет работать... Какой тайный смысл ты хотел реализовать объявлением переменой с тем же именем в var, после let? |
| Часовой пояс GMT +3, время: 19:02. |