Ознакомьтесь со следующим фрагментом кода HTML / Javascript:
<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>
Это выводит:
3, 3, 3, 0, 1, 2
это не то, что я ожидал - я ожидал выхода 0, 1, 2, 0, 1, 2,
Я (неправильно) предположил, что анонимная функция, помещаемая в массив, будет вести себя как замыкание, захватывая значение i
, назначенное при создании функции, но на самом деле кажется, что i
ведет себя как глобальная переменная.
Может кто-нибудь объяснить, что происходит с областью действия i
в этом примере кода, и почему анонимная функция не захватывает ее значение?