JSFiddle - React, Tailwind, and code Playground
by artgas_pro
JavaScript
//defer(f, ms) принимает функцию и возвращает обёртку над ней, которая откладывает вызов на ms миллисекунд:
function defer(f, ms) {
return function() {
setTimeout(() => f.apply(this, arguments), ms)
};
}
function sayHi(who) {
alert('Hello, ' + who);
}
let sayHiDeferred = defer(sayHi, 2000);
sayHiDeferred("John"); // выводит "Hello, John" через 2 секунды
//То же самое без стрелочной функции выглядело бы так:
function defer(f, ms) {
return function(...args) {
let ctx = this;
setTimeout(function() {
return f.apply(ctx, args);
}, ms);
};
}
//десь мы были вынуждены создать дополнительные переменные args и ctx, чтобы функция внутри setTimeout могла получить их.
/*
Шо я не можу зрозуміти
1) 4 рядок - навіщо нам переопредиляти контекст визову? чому просто не можна зробити setTimeout(() => f(), ms)
2) 18 рядок - коли ми зберігаємо this у ctx що ми зберігаємо?
*/