Язык javascript ч 1

Page 417

Именно обёртка возвращается декоратором delay и будет вызвана. Чтобы передать аргумент и контекст функции, вызываемой через ms миллисекунд, они копируются в локальные переменные savedThis и savedArgs. Это один из самых простых, и в то же время удобных способов передать чтолибо в функцию, вызываемую через setTimeout. [Открыть задачу в новом окне] 5

Напишите функцию debounce(f, ms), которая возвращает обёртку, которая передаёт вызов f не чаще, чем раз в ms миллисекунд. «Лишние» вызовы игнорируются. Все аргументы и контекст — передаются. Например:

01 function f() { ... } 02 03 var f = debounce(f, 1000); 04 05 f(1); // выполнится сразу же 06 f(2); // игнор 07 setTimeout( function() { f(3) }, 100); // игнор (прошло только 08 100мс) 09 setTimeout( function() { f(4) }, 1100); // выполнится 10 setTimeout( function() { f(5) }, 1500); // игнор Исходный документ с более развёрнутым тестом: tutorial/timers/debounce-src.html Решение Решение: tutorial/timers/debounce.html Вызов debounce возвращает функцию-обёртку. Все необходимые данные для неё хранятся в замыкании. При вызове ставится таймер и состояние state меняется на константу COOLDOWN («в процессе охлаждения»). Последующие вызовы игнорируются, пока таймер не обнулит состояние. [Открыть задачу в новом окне] 5


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.