Điều này liên quan đến việc biên dịch có điều kiện, một phát minh chỉ dành cho trình soạn thảo JScript (tên của IE cho hương vị của ECMAScript) dựa trên thông tin về trình duyệt và môi trường. Cú pháp liên quan đến biểu tượng @
theo sau là một chuỗi để tạo thành một biến, chỉ thị hoặc câu lệnh. Trong trường hợp này, sự hiện diện của @TODO
ngay sau khi bắt đầu nhận xét làm cho văn bản nhận xét được hiểu là câu lệnh biên dịch có điều kiện, với @TODO
là biến biên dịch có điều kiện (với giá trị NaN
: xem http://msdn.microsoft.com/en-us/library/k0h7dyd7%28v=VS.80%29.aspx).
Các câu lệnh biên dịch có điều kiện thường được chứa trong các nhận xét JavaScript: chúng có để ngăn các trình duyệt khác cố gắng giải thích mã nhưng thực tế không bắt buộc phải kích hoạt biên dịch có điều kiện. Các tài liệu MSDN là ở đây:
http://msdn.microsoft.com/en-us/library/ahx1z4fs%28v=VS.80%29.aspx
Tính năng này chỉ được kích hoạt cho mã xuất hiện sau khi biên soạn có điều kiện được kích hoạt, mà là đạt được với
/*@cc_on @*/
Do đó, nếu bạn có thể tìm dòng này và loại bỏ sau đó, //@TODO - report error
của bạn sẽ vẫn hoạt động bình thường. Tuy nhiên, một số mã của bạn có thể dựa vào việc biên dịch có điều kiện nên đây có thể không phải là một tùy chọn. Một cách giải quyết là để chèn một khoảng trống giữa đầu của bình luận (hoặc //
hoặc /*
) và @
biểu tượng:
// @TODO - report error
tài liệu của Microsoft là không đủ rõ ràng để biết lý do tại sao các công trình này, vì các biến biên soạn có điều kiện cũng làm việc bên ngoài nhận xét:
// The following works in IE:
/*@cc_on @*/
var j = @_jscript_build;
alert(j);
Vì vậy, tùy chọn an toàn nhất là tránh sử dụng @TODO
hoàn toàn.
Nguồn
2010-06-22 09:37:46
Không xảy ra trên bản sao IE8 của tôi. –
T.J. Crowder: Nó sẽ nếu bạn đặt '/ * @ cc_on @ * /' phía trên mã. –
Tôi đã có một suy nghĩ ngày hôm qua. Nếu cờ này được bắt đầu bởi javascript và vẫn hoạt động cho phạm vi TOÀN BỘ; điều đó có nghĩa là cho một trang wordpress với hàng chục kịch bản của bên thứ ba, một kịch bản có thể khởi tạo nó và tất cả các tập lệnh sẽ bị hút vào cùng một hành vi .... wow. – David