Để trả lời câu hỏi trực tiếp về lý do tại sao nó thay đổi, lỗi nằm trong quy trình tối ưu hóa "JIT" của động cơ V8 JS được Chrome sử dụng. Lúc đầu, mã được chạy chính xác như được viết, nhưng bạn càng chạy nó, thì càng có nhiều khả năng lợi ích của việc tối ưu hóa vượt quá chi phí phân tích.
Trong trường hợp này, sau khi thực hiện lặp lại trong vòng lặp, trình biên dịch JIT phân tích hàm và thay thế nó bằng một phiên bản được tối ưu hóa. Thật không may, phân tích đưa ra một giả định không chính xác và phiên bản được tối ưu hóa không thực sự tạo ra kết quả chính xác.
Cụ thể, người dùng Reddit RainHappens cho rằng đó là lỗi trong việc truyền kiểu :
Nó cũng thực hiện một số kiểu lan truyền (như kiểu mà một biến, v.v. có thể là). Có một loại "không thể phát hiện" đặc biệt khi một biến không xác định hoặc null. Trong trường hợp này, trình tối ưu hóa đi "null không thể phát hiện được, vì vậy nó có thể được thay thế bằng chuỗi" không xác định "để so sánh.
Đây là một trong những vấn đề khó khăn với việc tối ưu hóa mã: làm thế nào để đảm bảo rằng mã đã được sắp xếp lại để đạt được hiệu suất sẽ vẫn có tác dụng như ban đầu.