Не работает замыкание
Есть код который ставит алерты на кнопки:
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, время: 18:39. |