Недавно я получил вопрос на собеседование, на который я не смог правильно ответить. Вот так:
Напишите реализацию функции callAfter
, которая позволяет вызывать ЛЮБУЮ функцию через некоторое заданное время. Вывод функции должен оставаться неизменным. Функция должна иметь> следующий синтаксис:
Пример 1: Допустим, у вас есть функция с именем sum
примерно так:
function sum(a, b) {
console.log('Sum is: ', a + b);
}
Теперь вы должны иметь возможность выполнить:
sum.callAfter(5000, 8, 9);
Это должно вызвать функцию sum
через 5 секунд с параметрами 8 и 9. Вывод: 'Sum is: 17'.
Пример 2: Для функции difference
со следующей реализацией:
function difference(a, b) {
console.log('Difference is: ', a-b);
}
Вы должны быть в состоянии выполнить:
difference.callAfter(4000, 8, 6);
Это должно вызвать функцию difference
через 4 секунды с параметрами 8 и 6. Вывод: «Разница: 2».
ПРИМЕЧАНИЕ. Я знаю, что могу выполнить функцию через n секунд, используя что-то вроде:
var delay_func = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
Однако меня попросили присоединить callAfter
«подфункцию» к каждой функции для облегчения вызова:
<function_name>.callAfter(milliseconds, param1, param2, ...);