나는 이벤트 함수에서 인덱스를 유지하기 위해 루프를 반복하고있는 일부 요소에 이벤트 리스너를 추가하고 있습니다.for 루프에서 클로저의 올바른 사용법?
<button>solution 1</button>
<button>solution 2</button>
<script>
var buttons = document.getElementsByTagName('button');
for (var i = 0; i < 3; i++) {
var log = (function closure(number) {
return function() {
console.log(number);
};
})(i);
buttons[0].addEventListener("click", log);
}
for (var i = 0, len = 3; i < len; i++) {
(function (i) {
var log = function() {
console.log(i);
};
buttons[1].addEventListener("click", log);
})(i);
}
</script>
이 두 솔루션 정확하게 출력 0, 1, 2,하지만 난 어떤 내가 사용해야 하나 이유를 이해하기 위해 노력하고있어 ('잘못'은 폐쇄하지 않고 어떻게되는지보십시오).
올바른 방법은 어떤 방법을 사용합니까?
대신 청취자의 백을 가진 당신은 이벤트 위임을 사용할 수 있습니다. 메모리가 적어지면 코드와 DOM 간의 연관성이 줄어들 것입니다. 하나의 이벤트 수신기 만 있으면됩니다. 예 : http://nczonline.net/blog/2009/06/30/event-delegation-in-javascript –