Еще один вопрос про задачу. Прошу объяснить.
Задача:
Напишите функцию debounce(f, ms), которая возвращает обёртку, которая передаёт вызов f не чаще, чем раз в ms миллисекунд.
«Лишние» вызовы игнорируются. Все аргументы и контекст — передаются.
Решение:function debounce(f, ms) {
var state = null;
var COOLDOWN = 1;
return function() {
if (state) return;
f.apply(this, arguments);
state = COOLDOWN;
setTimeout(function() { state = null }, ms);
}
}
/* Тест должен выводить 14 */
function test() {
var log = '';
function f(a) { log += a; }
f = debounce(f, 1000);
f(1);
f(2);
setTimeout(function() { f(3) }, 100);
setTimeout(function() { f(4) }, 1100);
setTimeout(function() { f(5) }, 1500);
setTimeout(function() { alert(log) }, 2000); // 14
}
test();
Не могу понять это решение. Распишите пожалуйста что да как.
PS Особенно непонятно про возвращаемую внутреннюю функцию и про "log"