(tạo ra một câu hỏi riêng biệt sau khi bình luận về điều này: Javascript redeclared global variable overrides old value)redeclared javascript toàn cầu đè biến giá trị cũ trong IE
tôi đang tạo ra một scoped toàn cầu biến bằng cách sử dụng ký hiệu khung vuông và gán cho nó một giá trị bên trong tập tin một bên ngoài js .
Trong tệp js khác, tôi khai báo một biến có cùng tên với tên tôi vừa tạo ở trên. Lưu ý Tôi không chỉ định giá trị. Do đây là một khai báo lại của biến cùng giá trị cũ không nên overriden như đã mô tả ở đây: http://www.w3schools.com/js/js_variables.asp
Tạo 2 file javascript với nội dung sau: Script1
//create global variable with square bracket notation
window['y'] = 'old';
Script2
//redeclaration of the same variable
var y;
if (!y) y = 'new';
alert(y); //shows New instead of Old in IE
Bao gồm 2 tệp này trong tệp html của bạn
<html>
<head></head>
<body>
<script type="text/javascript" src="my.js"></script>
<script type="text/javascript" src="my2.js"></script>
</body>
</html>
Mở trang này trong Firefox và cảnh báo Chrome 'cũ' là hành vi mong đợi. Tuy nhiên trong IE 8 trang sẽ thực sự cảnh báo 'mới'
Bất kỳ ý tưởng nào về lý do tại sao điều này xảy ra trên IE?
Điều gì sẽ xảy ra nếu bạn đặt tất cả mã nội tuyến trong tệp HTML? Nó mang lại kết quả tương tự (cũ) cho tôi trong Firefox 3.5.8, Chrome 5.0.342.7 và Konqueror 4.3.5. Kết quả cho các trình duyệt khác sẽ hữu ích. –
Nếu bạn đặt tất cả các mã trong một tập tin, cẩu sẽ xảy ra và vấn đề có thể sẽ không có mặt. –
Có nếu bạn đặt tất cả mã trong một cảnh báo địa điểm duy nhất hiển thị 'cũ' trên tất cả các trình duyệt –