Mã này:Tại sao mã này cư xử khác nhau ở giá trị khác nhau
var i = 10000000000;
do {
i--;
}
while (i !== 0);
//Result: 38 second.
var i = 10000000000;
do {}
while (i-- !== 0);
//Result: 27 second.
//(same result with while (i--)
var i = 10000000000;
do {}
while (i-- | 0);
//Result: 13.5 second.
Câu hỏi đặt ra là: Tại sao các phiên bản được đồng thời cho giá trị nhỏ hơn của tôi? Nếu tôi cắt một số không từ i; tất cả các phiên bản cần 2,2 giây. (được kiểm tra ngay cả sau khi tối ưu hóa JIT - chỉ trong V8)
Có vẻ hợp lý rằng phiên bản thứ ba phải luôn nhanh hơn nhưng chỉ nhanh hơn cho các giá trị rất cao.
Đó chỉ là sự tò mò ... không thực sự quan trọng.
Tôi đã cố gắng để đưa chúng vào jsperf nhưng nó có xu hướng sụp đổ trình duyệt của tôi http://jsperf.com/do-while-speed-test. Hãy nhớ rằng các công cụ javascript khác nhau sẽ dẫn đến các kết quả khác nhau, vì chúng ưu tiên những thứ khác nhau. Nó có thể đi xuống một cái gì đó đơn giản như cách xử lý các con số của hệ điều hành bên dưới. (UPDATE: các thử nghiệm đã chạy nhưng JSperf đang ném một lỗi về việc thiếu thuộc tính 'name' của nó. Không có ý tưởng tại sao điều đó xảy ra) – somethinghere
Điều cuối cùng là nhanh nhất vì nó chỉ lặp lại 1410065408 lần và thực sự là 1/3 tốc độ của giây phiên bản, tức là 104449290 mỗi giây và 370370370 mỗi giây –
Quan sát tốt. Không quan sát điều đó. –