Tôi cố gắng hiểu phạm vi biến đổi trong Javascript. Dưới đây là những gì tôi đang làm:javascript: bản địa hóa các biến trong khối
<script>
for (var i = 0; i < 3; i++) {
document.getElementById(i).onclick = function() {
console.log(i);
}
}
</script>
Kết quả luôn là 3 và tôi hiểu rằng đó là vì i
đã được giữ lại theo tham chiếu. Làm cách nào để bản địa hóa i
để có thể ghi nhật ký giá trị gia tăng?
Cảm ơn!
cập nhật
Thanks guys để được trả lời nhanh chóng và đàng hoàng. các giải pháp thực sự giúp đỡ!
Ban đầu, tôi đã cố gắng một cách tiếp cận tương tự như @GrailsGuy, ở đây nó là:
<script>
for (var i = 1; i <= 3; i++) {
document.getElementById(i).onclick = function() {
console.log(logCall(i));
}
}
function logCall(i) {
return i;
}
</script>
Nhưng có vẻ như i
không được địa phương. Không thể hiểu tại sao!
Liệu nó có cái gì để làm với các sự kiện onclick? Làm thế nào nó có thể lặp qua onclick nếu người dùng chỉ bấm một lần? Và bạn có cần hàm logCall() không? Nó sẽ không giống như console.log (i)? – oobie11
Về chỉnh sửa của bạn, đó là cùng một vấn đề như trong ví dụ đầu tiên của bạn. Cho dù bạn có 'console.log (i)' hoặc 'superlongandconfusingfunctionname (i)' bên trong trình xử lý sự kiện không tạo ra sự khác biệt. Bạn đang cố truy cập 'i' sau khi vòng lặp kết thúc. –