Để chèn console.log(i) để in ra từ 0 đến 5 ta phải có cách truyền i vào hàm callback trong addEventListener()
Cái này giải thích hơi dài dòng, để hiểu hãy đọc về cơ chế Event Loop và Callback queue của JavaScript.
Để sửa chương trình có thể thay: var i = 0 thành let i = 0 như dưới
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<button>Button 1</button>
<button>Button 2</button>
<button>Button 3</button>
<button>Button 4</button>
<button>Button 5</button>
<script>
var myList = document.getElementsByTagName('button');
var arr = [1,2,3,4,5]; // dòng này thừa trong đoạn chương trình
for (let i = 0; i < 5; i++){
myList[i].addEventListener('click', function (){
console.log(i);
})
}
</script>
</body>
</html>
Hoặc có thể dùng closure để lưu giá trị của i như sau:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<button>Button 1</button>
<button>Button 2</button>
<button>Button 3</button>
<button>Button 4</button>
<button>Button 5</button>
<script>
var myList = document.getElementsByTagName('button');
var arr = [1,2,3,4,5];
for (var i = 0; i < 5; i++){
(function foo() {
var j = i;
myList[j].addEventListener('click', function (){
console.log(j);
});
}());
}
</script>
</body>
</html>