@ MooGoo ответ правильный, но, возможно, требуется более подробное объяснение.
Когда вы вызываете функцию apply
на f
следующим образом:
f.apply(ctx, args);
... затемвы выполняете apply
в контексте f
.
Но когда вы передаете ссылку на apply
функции, например:
setTimeout(f.apply, 1000, o);
...это все, что вы делаете: передача ссылки на функцию f.apply
.Это эквивалентно передаче Function.prototype.apply
, потому что:
console.log(f.apply === Function.prototype.apply); // true
Любое соединение с f
потеряно в window.setTimeout
.Он получает ссылку на общую функцию apply
из Function.prototype
.Ничего более.Без контекста.
Следовательно, как и в любом другом случае, когда явный контекст не установлен, функция apply
вызывается с window
в качестве объекта контекста.