Có đúng là không có sự đảm bảo nào trên các trình duyệt chính rằng các thẻ script sau sẽ luôn thực hiện cả tuần tự AND và theo thứ tự khai báo? tức là tôi có nên giả định rằng mã sau sẽ không luôn mang lại x == 'ab' trong cảnh báo?Thứ tự JavaScript <script> thực thi thẻ không được đảm bảo trong các trình duyệt chính?
<head>
<script type="text/javascript">
//tag A
var x = x || ''; x += 'a';
</script>
<script type="text/javascript">
//tag B
var x = x || ''; x += 'b';
</script>
</head>
<body>
<script type="text/javascript">
alert('x='+x);
<script>
</body>
... và nó có thể là x sẽ thay là một trong những cách sau:
- 'ba' - nếu thẻ B thực hiện trước khi A
- 'a' hoặc 'b' - tình trạng chủng tộc trong đó A và B thực hiện song song (Mặc dù có vẻ như this chủ đề nói rõ ràng rằng các trình duyệt chỉ phân bổ một chủ đề duy nhất của JS)
Tôi quen thuộc với vấn đề này đối với tệp js src được liên kết, không phải cho khối tập lệnh như được xác định trong câu hỏi. ví dụ. sẽ thất bại 9 lần trong số mười (tệp js được lưu trong bộ nhớ cache là 1 trong 10) –
Trình duyệt chắc chắn nhất nên thực thi các tập lệnh này cả tuần tự và trong gọi món. Kinh nghiệm của bạn có ngược lại không? –
@JonathanFingland: Nó không phải là một vấn đề đối với các tệp JS được liên kết, trừ khi chúng sử dụng các thuộc tính 'async' hoặc 'defer', hoặc tự viết/thêm các tập lệnh nữa. – bobince