Я писал программу на javascript и запускал ее в Chrome 7, когда столкнулся со странным поведением. Теперь, в моем коде, со всеми остальными вещами, мне потребовалось некоторое время, чтобы понять, что это был не я.
Я разобрал суть кода ниже.
<html>
<script>
var data = [1,2,3,4,5];
var data_copy = [];
for (var i=0; i<data.length; i++){
data_copy.push(data[i]);
}
console.log("Printing before:");
console.log(data_copy);
//alert(data_copy);
console.log("------------------------");
for (var i=0; i<data_copy.length; i++){
data_copy[i] = data_copy[i] * 1000;
}
console.log("Printing after:");
console.log(data_copy);
</script>
</html>
Когда я запускаю это в Chrome 7, я получаю вывод, который следует в консоли Javascript:
Printing before:
[1000, 2000, 3000, 4000, 5000]
------------------------
Printing after:
[1000, 2000, 3000, 4000, 5000]
Почему первый вызов console.log выводит измененную версию data_copy?
Теперь, если я раскомментирую «alert» и запуском того же кода, я получу то, что вы обычно ожидаете:
Printing before:
[1, 2, 3, 4, 5]
------------------------
Printing after:
[1000, 2000, 3000, 4000, 5000]
Я также попробовал код в node.js и получил второй (нормальный) вывод.
Есть идеи?
Это какая-то JIT-оптимизация пошла не так?
Или я упускаю что-то очевидное?