Kiểm tra các đoạn mã sau đây HTML/Javascript:Phạm vi của biến Javascript được khai báo trong vòng lặp for() là gì?
<html>
<head>
<script type="text/javascript">
var alerts = [];
for(var i = 0; i < 3; i++) {
alerts.push(function() { document.write(i + ', '); });
}
for (var j = 0; j < 3; j++) {
(alerts[j])();
}
for (var i = 0; i < 3; i++) {
(alerts[i])();
}
</script>
</head><body></body></html>
đầu ra này:
3, 3, 3, 0, 1, 2
mà không phải là những gì tôi đã mong đợi - Tôi đã chờ đợi đầu ra 0, 1, 2, 0, 1, 2,
tôi (không chính xác) giả định rằng hàm ẩn danh được đẩy vào mảng sẽ hoạt động như một đóng, bắt giá trị i
được gán khi hàm được tạo - nhưng nó thực sự xuất hiện là i
hoạt động như một biến toàn cục.
Bất cứ ai có thể giải thích điều gì đang xảy ra với phạm vi i
trong ví dụ mã này hay không và tại sao hàm ẩn danh không ghi lại giá trị của nó?
Câu trả lời đúng - cảm ơn! - nhưng tôi đã chấp nhận câu trả lời của Pointy vì "riêng tư của tôi" + idaho khiến tôi cười lớn ... –