web.timers.js 1.3 KB

1234567891011121314151617181920212223242526272829303132
  1. var $ = require('../internals/export');
  2. var global = require('../internals/global');
  3. var apply = require('../internals/function-apply');
  4. var isCallable = require('../internals/is-callable');
  5. var userAgent = require('../internals/engine-user-agent');
  6. var arraySlice = require('../internals/array-slice');
  7. var validateArgumentsLength = require('../internals/validate-arguments-length');
  8. var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check
  9. var Function = global.Function;
  10. var wrap = function (scheduler) {
  11. return function (handler, timeout /* , ...arguments */) {
  12. var boundArgs = validateArgumentsLength(arguments.length, 1) > 2;
  13. var fn = isCallable(handler) ? handler : Function(handler);
  14. var args = boundArgs ? arraySlice(arguments, 2) : undefined;
  15. return scheduler(boundArgs ? function () {
  16. apply(fn, this, args);
  17. } : fn, timeout);
  18. };
  19. };
  20. // ie9- setTimeout & setInterval additional parameters fix
  21. // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers
  22. $({ global: true, bind: true, forced: MSIE }, {
  23. // `setTimeout` method
  24. // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout
  25. setTimeout: wrap(global.setTimeout),
  26. // `setInterval` method
  27. // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval
  28. setInterval: wrap(global.setInterval)
  29. });