В одном известном учебнике по Javascript есть пример функции - обертки, которая возвращает функцию f с задержкой ms (здесь она записывается в Function.prototype, но это не суть)
function f() {
alert("Hello!");
}
f.defer(1000); // выведет "Hello!" через 1 секунду
Вопрос в том,что this в данном примере как я понял указывает на функцию, у которой мы запускаем метод defer . но ведь это не объект? как это объяснить?
везде примеры только с объектами, я уже запутался.спасибо большое
но почему же тогда в заданном мною вопросе под this понимается функция, а в этом примере нет?
если кратко – то в примере из вопроса функция объявлена как метод объекта. А комментариях выше - в глобальном контексте.
А подробности уже можете изучить по ссылкам выше.
nik8n, нет. Здесь this будет указывать на window, потому что функции определены в глобальном контексте (а стрелочная вообще не имеет this)
arguments берется из той функции, где она используется. В данном случае - из анонимной.
let sayHiDeferred = defer(sayHi, 2000);
Здесь в переменной будет храниться та самая анонимная функция.
sayHiDeferred("John");
Теперь мы вызываем эту анонимку с одним аргументом. В arguments будет только ['john']
Но для apply нужно первым аргументом указать контекст выполнения. В данном коде мы указываем this, который там указывает на window. Таким образом наша отложенная функция будет выполнена в глобальном контексте.