2010-07-28 32 views
8

Tại sao đầu ra khác nhau trong IE và FF?
Trong IE hiển thị của nó: Xin chào và Trong FF hiển thị của nó: HiMã javascript này có phụ thuộc vào trình duyệt không?

var message = "Hi"; 
setTimeout(function(){alert(message);},10); 
setTimeout(function(){message = "Hello";},0); 

standarad là gì? trình duyệt nào đang hoạt động đúng không?

Lưu ý: nếu tôi chuyển đổi 10-11 trong FF sau đó nó cho thấy Xin chào

+0

Đây có thể là vấn đề về thời gian nhiều hơn bất kỳ vấn đề nào khác. Bạn có thể cung cấp một số thông tin về ứng dụng thực tế của điều này cho bất kỳ điều gì bạn đang làm không? – jtbandes

Trả lời

1

Trên PC của tôi, tôi chạy nó trong cả FF và IE, và tôi đã có kết quả ngược lại chính xác.

Lý do cho việc này là thời gian chờ của bạn chỉ dài 10 mili giây. Độ phân giải của Timers trên Windows thực sự là khoảng 10ms, vì vậy có thể là thời gian chờ có thể xảy ra trước tiên. Để thực sự chắc chắn rằng một điều xảy ra trước khi khác, bạn chắc chắn nên có một khoảng cách rộng hơn giữa thời gian chờ.

Và thậm chí sau đó, bạn không nên hy vọng nó sẽ luôn luôn làm việc :-)

Nếu bạn thực sự muốn làm những việc theo thứ tự, giữ nó trong cùng một dòng mã, hoặc thiết lập cờ nói liệu hoặc không phải là một hành động cụ thể đã được hoàn thành, và kiểm tra xem trước khi thực hiện một hành động thứ hai dựa vào hành động đầu tiên.

0

Thứ tự thực hiện cho các sự kiện hẹn giờ không được đảm bảo trong trình duyệt. Chúng được xử lý nội bộ bằng cách thực hiện bộ đếm thời gian gốc của hệ điều hành và có thể kích hoạt theo thứ tự khác nhau.

Vì bạn đã chỉ định một lượng thời gian nhỏ như vậy, rất có khả năng đây là trường hợp.

0

Tôi hiểu rõ điều đó.

gì firefox làm việc gì là bạn mong đợi tức là:

  • Thiết lập thông điệp đầu tiên sau 1/100th của một giây & cache giá trị tin nhắn.
  • Hiển thị thông báo thứ hai ngay lập tức.
  • Hiển thị thông báo đầu tiên {if 100 secs over}.

Trong khi những gì IE làm việc gì là mang lại sự nghi ngờ:

  • Thiết lập thông điệp sau 1/100th của một giây.
  • Đặt thư thành giá trị mới, bỏ qua thời gian chờ mới.
  • Hiển thị thông báo {if 1/100 giây hơn}.

Vì vậy, về cơ bản những gì tôi nhận thấy là biến tin nhắn có phạm vi toàn cầu trong IE trong khi firefox tạo bộ nhớ cache giá trị cuối cùng được chuyển đến hàm timeout. Để nhận ra điều này, hãy sử dụng khoảng thời gian dài hơn có thể là 1000 & 10000 (1 & 10 giây) thay vì 0 & 10. Điều này sẽ cho bạn biết rằng firefox hiển thị cảnh báo hai lần trong khi IE chỉ một lần.

+0

Vâng tôi đoán ben đã cho một cái nhìn rõ ràng về lý do tại sao điều này đã xảy ra. – loxxy

Các vấn đề liên quan