Lời giải thích và giải pháp là in the MDN:
Nếu bạn cần phải vượt qua một đối số cho hàm callback của bạn, nhưng nó cần để làm việc trong Internet Explorer, mà không hỗ trợ gửi tham số bổ sung (không với setTimeout() hoặc setInterval()), bạn có thể bao gồm mã tương thích với IE cụ thể này sẽ bật chức năng thông số tiêu chuẩn HTML5 trong trình duyệt đó cho cả hai tính giờ chỉ bằng cách chèn nó vào đầu tập lệnh của bạn.
if (document.all && !window.setTimeout.isPolyfill) {
var __nativeST__ = window.setTimeout;
window.setTimeout = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) {
var aArgs = Array.prototype.slice.call(arguments, 2);
return __nativeST__(vCallback instanceof Function ? function() {
vCallback.apply(null, aArgs);
} : vCallback, nDelay);
};
window.setTimeout.isPolyfill = true;
}
if (document.all && !window.setInterval.isPolyfill) {
var __nativeSI__ = window.setInterval;
window.setInterval = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) {
var aArgs = Array.prototype.slice.call(arguments, 2);
return __nativeSI__(vCallback instanceof Function ? function() {
vCallback.apply(null, aArgs);
} : vCallback, nDelay);
};
window.setInterval.isPolyfill = true;
}
Nguồn
2012-09-13 10:49:25
này đã cho tôi một hay hai giờ để tìm ra lý do tại sao biến phạm vi bên ngoài của tôi như 'undefined'. Internet Explorer là tồi tệ nhất! –