var $ = require('../internals/export'); var global = require('../internals/global'); var apply = require('../internals/function-apply'); var isCallable = require('../internals/is-callable'); var userAgent = require('../internals/engine-user-agent'); var arraySlice = require('../internals/array-slice'); var validateArgumentsLength = require('../internals/validate-arguments-length'); var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check var Function = global.Function; var wrap = function (scheduler) { return function (handler, timeout /* , ...arguments */) { var boundArgs = validateArgumentsLength(arguments.length, 1) > 2; var fn = isCallable(handler) ? handler : Function(handler); var args = boundArgs ? arraySlice(arguments, 2) : undefined; return scheduler(boundArgs ? function () { apply(fn, this, args); } : fn, timeout); }; }; // ie9- setTimeout & setInterval additional parameters fix // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers $({ global: true, bind: true, forced: MSIE }, { // `setTimeout` method // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout setTimeout: wrap(global.setTimeout), // `setInterval` method // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval setInterval: wrap(global.setInterval) });