Nhờ giải thích logic đoạn code Javascript

<script type="text/javascript">
	var myList = document.getElementsByTagName('button');
	var arr = [1,2,3,4,5];
	for (var i = 0; i < 5; i++){
		myList[i].addEventListener('click', function (){
			console.log(i);
		})
	}
</script>

Ở trong body có 5 thẻ button ạ!
Ai biết dịch logic đoạn code này giúp em với. Em cảm ơn ạ!

1 Like

sẽ trả về danh sách 5 tag button

không hiểu để làm gì

loop cơ bản trong đó

sự kiện click lên mỗi button

3 Likes

Hai bạn học cùng trường?
Đoạn code gần giống như đúc, chỉ khác mỗi ‘li’ và ‘button’

5 Likes

Hoặc cùng một người :thinking:

2 Likes

chắc phải dịch ra mã máy bạn mới hiểu được :wink:

3 Likes

cái này hình như có thể xảy ra 1 bug thì phải…:smiley:

1 Like

bị confusing semantic kết quả khi click là 4

1 Like

Cái này ra toàn số 5 thôi :smiley:

Mảng arr đúng là dư thừa.

1 Like

Để 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>
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?