Skip to content

Decorators and forwarding, call/apply #218

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
139 commits
Select commit Hold shift + click to select a range
6f24e24
add portuguese translations for 09-call-apply-decorators
nazarepiedady Jul 20, 2021
f61fc2a
Update 1-js/06-advanced-functions/09-call-apply-decorators/01-spy-dec…
nazarepiedady Jul 24, 2021
75233f9
Update 1-js/06-advanced-functions/09-call-apply-decorators/01-spy-dec…
nazarepiedady Jul 24, 2021
df22c3a
Update 1-js/06-advanced-functions/09-call-apply-decorators/01-spy-dec…
nazarepiedady Jul 24, 2021
f791dc2
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/s…
nazarepiedady Jul 24, 2021
f21bfd1
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/s…
nazarepiedady Jul 24, 2021
ed2891f
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
e81827a
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/s…
nazarepiedady Jul 24, 2021
5a1d081
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/s…
nazarepiedady Jul 24, 2021
65061ee
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
a940f62
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
beb803e
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
8daf648
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
e035343
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
e64df68
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/s…
nazarepiedady Jul 24, 2021
2ac8f34
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/t…
nazarepiedady Jul 24, 2021
1fe7c8e
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/t…
nazarepiedady Jul 24, 2021
6ec0c37
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
27720a9
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
3c51f58
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
019f8c7
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
470c042
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
2424a49
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
373d7de
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
f4eb016
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
28db3ae
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
fc60987
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/t…
nazarepiedady Jul 24, 2021
31c7c26
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
9922f99
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/t…
nazarepiedady Jul 24, 2021
ce1c564
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
20201dd
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
79cb3d9
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
fe0ac71
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
e44b0a2
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
5408986
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
5a7fb16
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
febace3
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
2a1a6cc
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
a821f52
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
0e02ffa
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
e18716d
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
6fb0673
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
26310a2
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
60dd4ea
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
960a729
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 24, 2021
5b97fc8
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
3351efc
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
08b2eb7
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
94d26d6
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
42c670d
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
30ae0a0
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
3265629
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
7267678
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
f3e93b3
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
b5625b9
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
ed8f906
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
045b955
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
a0fe4a0
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
3d31814
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
2f07e4b
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
bf58b55
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
3303ae5
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
fb1db91
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
0493aa4
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
73f53ea
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
741ff03
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 24, 2021
049b00d
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 24, 2021
da7eff1
Apply suggestions from code review
nazarepiedady Jul 24, 2021
f98ef4b
translate to portuguese debounce.view/index.html
nazarepiedady Jul 24, 2021
8b3c159
Update task.md
odsantos Jul 25, 2021
d16f1fa
Add a blank line.
odsantos Jul 26, 2021
50cd890
Update 1-js/06-advanced-functions/09-call-apply-decorators/01-spy-dec…
nazarepiedady Jul 26, 2021
08c2184
Update 1-js/06-advanced-functions/09-call-apply-decorators/01-spy-dec…
nazarepiedady Jul 26, 2021
8c800bd
Update 1-js/06-advanced-functions/09-call-apply-decorators/01-spy-dec…
nazarepiedady Jul 26, 2021
4ec2b71
Update 1-js/06-advanced-functions/09-call-apply-decorators/01-spy-dec…
nazarepiedady Jul 26, 2021
9034888
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/t…
nazarepiedady Jul 26, 2021
17d85a6
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/t…
nazarepiedady Jul 26, 2021
193db3c
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 26, 2021
034ee04
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 26, 2021
1f12b61
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Jul 26, 2021
fa16310
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 26, 2021
1eab016
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 26, 2021
d5c26ae
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 26, 2021
b492500
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 26, 2021
f483b32
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 26, 2021
11f826b
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 26, 2021
833f4b0
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 26, 2021
8f77aa3
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 26, 2021
8865725
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 26, 2021
1dad4e7
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 26, 2021
8434772
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 26, 2021
8e0dae4
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 26, 2021
2337bb9
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/s…
nazarepiedady Jul 26, 2021
c32f813
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/t…
nazarepiedady Jul 26, 2021
bf26d67
Add space for untranslated line.
odsantos Jul 27, 2021
0d241d6
Add untranslated line.
odsantos Jul 27, 2021
18e8949
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Jul 28, 2021
029fe81
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/s…
nazarepiedady Jul 28, 2021
d13f456
translate the scripts into 4-throttle folder
nazarepiedady Jul 28, 2021
0b65ff8
translate the scripts into 3-debounce folder
nazarepiedady Jul 28, 2021
1ad0da4
translate the scripts into 01-spy-decorator folder
nazarepiedady Jul 28, 2021
deb74e8
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 29, 2021
2ddace6
Update 1-js/06-advanced-functions/09-call-apply-decorators/01-spy-dec…
nazarepiedady Jul 29, 2021
c86916e
Update 1-js/06-advanced-functions/09-call-apply-decorators/01-spy-dec…
nazarepiedady Jul 29, 2021
fdb8eb2
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 29, 2021
71a229f
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 29, 2021
fbfd1a0
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 29, 2021
16a516b
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Jul 29, 2021
3fe9057
complete translations that are not completed
nazarepiedady Jul 29, 2021
41512ab
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Aug 2, 2021
af56b83
Update 1-js/06-advanced-functions/09-call-apply-decorators/02-delay/_…
nazarepiedady Aug 4, 2021
55e6731
Update 1-js/06-advanced-functions/09-call-apply-decorators/01-spy-dec…
nazarepiedady Aug 4, 2021
c6148f9
Update 1-js/06-advanced-functions/09-call-apply-decorators/03-debounc…
nazarepiedady Aug 4, 2021
d05874c
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Aug 4, 2021
c4a1750
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Aug 4, 2021
3996f37
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Aug 4, 2021
23b6c11
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Aug 4, 2021
7969605
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Aug 4, 2021
9bf4f1f
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Aug 4, 2021
b1da41a
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Aug 4, 2021
fd1e970
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Aug 4, 2021
dc5e050
Update 1-js/06-advanced-functions/09-call-apply-decorators/article.md
nazarepiedady Aug 4, 2021
9f06223
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Aug 4, 2021
b126223
Update 1-js/06-advanced-functions/09-call-apply-decorators/04-throttl…
nazarepiedady Aug 4, 2021
2deb617
docs: update `call-apply-decorators/throttle` article
nazarepiedady Mar 5, 2024
553b999
docs: update `call-apply-decorators/debounce` article
nazarepiedady Mar 5, 2024
58420f8
docs: update `call-apply-decorators/delay` article
nazarepiedady Mar 5, 2024
626cf58
docs: update `call-apply-decorators/debounce/debounce.svg`
nazarepiedady Mar 5, 2024
bf3e634
docs: update `call-apply-decorators/decorator-makecaching-wrapper.svg`
nazarepiedady Mar 5, 2024
07f5a47
docs: update `call-apply-decorators/spy-decorator` article
nazarepiedady Mar 15, 2024
5a2cc59
docs: update `call-apply-decorators/article.md` english content
nazarepiedady Mar 15, 2024
8fc6d38
docs: translate the first two section of `call-apply-decorators/artic…
nazarepiedady Mar 15, 2024
23ed1bf
docs: translate one more piece of `call-apply-decorators` article
nazarepiedady Mar 16, 2024
fe966ce
docs: translate one more piece of `call-apply-decorators` article
nazarepiedady Mar 17, 2024
a75c9f4
docs: finish the translation of `call-apply-decorators` article
nazarepiedady Mar 18, 2024
00481c7
Merge branch 'master' into decorators-forwarding-call-apply
nazarepiedady Mar 18, 2024
79b2b8c
docs: update `call-apply-decorators/spy-decorator/task.md`
nazarepiedady Mar 24, 2024
f60fbb7
docs: update `call-apply-decorators/delay/solution.md`
nazarepiedady Mar 24, 2024
9f2d639
docs: update `call-apply-decorators/spy-decorator/task.md`
nazarepiedady Mar 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
docs: update call-apply-decorators/throttle article
  • Loading branch information
nazarepiedady committed Mar 5, 2024
commit 2deb617e18bc82016a589b64a17b87248b156c03
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,33 @@ function throttle(func, ms) {
function wrapper() {

if (isThrottled) {
// memorizar os últimos argumentos para a chamada depois da espera
// memorizar os últimos argumentos a
// chamar depois arrefecimento
savedArgs = arguments;
savedThis = this;
return;
}

// caso contrário vá para o estado de espera
// caso contrário, passa ao estado
// de arrefecimento
func.apply(this, arguments);

isThrottled = true;

// planeia reinicializar isThrottled depois do atraso
// planear reiniciar `isThrottled`
// depois do atraso
setTimeout(function() {
isThrottled = false;
if (savedArgs) {
// se houver chamadas, savedThis/saveArgs tem a última
// a chamada recursiva executa a função e configura a espera novamente
// se houve chamadas, `savedThis` ou
// `savedArgs` tem a última
// a chamada recursiva executa a função
// e define novamente o arrefecimento
wrapper.apply(savedThis, savedArgs);
savedArgs = savedThis = null;
}
}, ms);
}

return wrapper;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ describe("throttle(f, 1000)", function() {

it(" a terceira chamada espera 1000ms depois da segunda chamada", function() {
this.clock.tick(100);
f1000(4); // (throttling - menos do que 1000ms desde a última execução)
f1000(4); // (regulação - menos do que 1000ms desde a última execução)
this.clock.tick(100);
f1000(5); // (throttling - menos do que 1000ms desde a última execução)
f1000(5); // (regulação - menos do que 1000ms desde a última execução)
this.clock.tick(700);
f1000(6); // (throttling - menos do que 1000ms desde a última execução)
f1000(6); // (regulação - menos do que 1000ms desde a última execução)

this.clock.tick(100); // agora 100 + 100 + 700 + 100 = 1000ms se passaram

Expand All @@ -48,7 +48,7 @@ describe("throttle(f, 1000)", function() {

describe('throttle', () => {

it('executa a chamada encaminhada uma vez', done => {
it('executa uma chamada encaminhada uma vez', done => {
let log = '';
const f = str => log += str;
const f10 = throttle(f, 10);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ function throttle(func, ms) {
}
```

Uma chamada de `throttle(func, ms)` retorna `wrapper`.
Uma chamada a `throttle(func, ms)` retorna `wrapper`.

1. Durante a primeira chamada, o `wrapper` apenas executa `func` e configura o estado de espera (`isThrottled = true`).
2. Neste estado todas as chamadas são memorizadas em `savedArgs/savedThis`. Note que ambos, o contexto e os argumentos, são igualmente importantes e devem ser memorizados. Nós precisamos deles simultaneamente para reproduzir a chamada.
3. Depois que `ms` milissegundos passam, `setTimeout` é acionada. O estado de espera é removido (`isThrottled = false`) e, se nós tivermos chamadas ignoradas , o `wrapper` é executado com os últimos argumentos e contexto memorizados.
1. Durante a primeira chamada, o `wrapper` apenas executa a `func` e define o estado de arrefecimento (`isThrottled = true`).
2. Neste estado todas as chamadas são memorizadas em `savedArgs/savedThis`. É de notar que tanto o contexto como os argumentos são igualmente importantes e devem ser memorizados. Nós precisamos destes simultaneamente para reproduzir a chamada.
3. Após `ms` milissegundos, `setTimeout` é acionada. O estado de arrefecimento é removido (`isThrottled = false`) e, se tivermos ignorado chamadas, o `wrapper` é executado com os últimos argumentos e contexto memorizados.

O terceiro passo executa não `func`, mas o `wrapper`, porque nós não só precisamos de executar `func`, mas mais uma vez, de entrar no estado de espera e configurar o tempo limite para reiniciá-lo.
O terceiro passo não executa a `func`, mas sim o `wrapper`, porque não só precisamos de executar a `func`, como também entrar novamente no estado de arrefecimento e configurar o tempo de espera para reiniciá-lo.
Original file line number Diff line number Diff line change
Expand Up @@ -2,52 +2,52 @@ importance: 5

---

# O Decorador Throttle
# Decorador Regulador

Crie um decorador de "estrangulamento" `throttle(f, ms)` -- que retorne um encapsulador.
Crie um decorador de "regulação" `throttle(f, ms)` -- que retorna uma função envolvente.

Quando for chamado várias vezes, ele passa a chamada para `f` no máximo uma vez por `ms` milissegundos.
Quando é chamado várias vezes, este passa a chamada a `f` no máximo uma vez por `ms` milissegundos.

A diferença de debounce é que é um decorador completamente diferente:
- `debounce` executa a função uma vez depois do período de "espera". Boa para processar o resultado final.
- `throttle` não é executada mais do que uma vez em `ms` de tempo. Boa para atualizações regulares que não sejam efectuadas num intervalo de tempo pequeno.
Em comparação com o decorador de redução, o comportamento é completamente diferente:
- `debounce` executa a função uma vez após o período de "arrefecimento". Bom para processar o resultado final.
- `throttle` executa a função não mais frequentemente do que o tempo dado `ms`. Bom para atualizações regulares que não devem ser muito frequentes.

Por outras palavras, `throttle` é como uma secretária que aceita chamadas telefónicas, mas incomonda o chefe (chama a `f` atual) não mais do que uma vez por`ms` milissegundos.
Por outras palavras, `throttle` é como uma secretária que aceita chamadas telefónicas, mas que incomoda a chefe (chama a verdadeira `f`) não mais do que uma vez por `ms` milissegundos.

Vamos verificar a aplicação na vida real para melhor compreender esse requisito e ver de onde ele vem.
Vejamos a aplicação na realidade para compreender melhor este requisito e ver de onde vem.

**Por exemplo, queremos rastrear movimentos do rato**

Num navegador, nós podemos configurar uma função para ser executada a cada movimento do rato e receber a localização do ponteiro à medida que ele se move. Num período de uso constante do rato, esta função geralmente é executada com muita frequência, pode ser algo como 100 vezes por segundo (a cada 10 ms).
**Gostaríamos de atualizar alguma informação na página web sempre que o ponteiro se mover.**
Num navegador, podemos configurar uma função para ser executada em cada movimento do rato e obter a localização do ponteiro à medida que este se move. Durante uma utilização ativa do rato, esta função é normalmente executada com muita frequência, podendo ser algo como 100 vezes por segundo (a cada 10 milissegundos).**Gostaríamos de atualizar algumas informações na página da Web quando o ponteiro se move.**

A função de atualização `update()` é muito pesada de se fazer a cada micro-movimento. Também não faz sentido executar isso mais de uma vez por 100ms.
...Mas a função de atualização `update()` é demasiado pesada para o fazer em cada micro-movimento. Também não faz sentido atualizar mais do que uma vez por 100ms.

Portanto, vamos atribuir `throttle(update, 100)` como a função a ser executada a cada movimento de rato ao invés da `update()` original. O decorador será chamado com frequência, porém `update()` será chamada no máximo uma vez por 100ms.
Por isso, a envolveremos no decorador: usamos `throttle(update, 100)` como uma função a ser executada em cada movimento do rato, em vez da `update` original. O decorador será chamado frequentemente, mas encaminhará a chamada a `update` no máximo uma vez a cada 100ms.

Visualmente, se parecerá com algo assim:
Visualmente, terá o seguinte aspeto:

1. Para o primeiro movimento do rato a variante decorada passa a chamada para `update`. É importante que o usuário veja a nossa reação aos seus movimentos imediatamente.
2. Depois, ao mover do rato, até `100ms` nada acontece. A variante decorada ignora as chamadas.
3. Ao final de `100ms` -- mais um `update` acontece com as últimas coordenadas.
4. Continuando, finalmente, o rato pára em algum lugar. A variante decorada espera até `100ms` expirarem e depois executa o `update` com as últimas coordenadas. Então, talvez o mais importante, as coordenadas finais do rato são processadas.
1. Para o primeiro movimento do rato, a variante decorada passa imediatamente a chamada a `update`. Isso é importante, o usuário vê a nossa reação ao seu movimento imediatamente.
2. Depois, à medida que o rato se move, até `100ms` nada acontece. A variante decorada ignora as chamadas.
3. No final de `100ms` -- mais uma `update` acontece com as últimas coordenadas.
4. Então, finalmente, o rato para em algum lugar. A variante decorada espera até `100ms` expiraram e depois executa a `update` com as últimas coordenadas. Assim, o mais importante, as últimas coordenadas do rato são processadas.

Um código de exemplo:
Um exemplo de código:

```js
function f(a) {
console.log(a);
}

// f1000 passa chamadas para f no máximo uma vez por 1000 ms
// f1000 passa chamadas a `f` no máximo uma vez por 1000 ms
let f1000 = throttle(f, 1000);

f1000(1); // exibe 1
f1000(2); // (estrangulamento, 1000ms ainda não passaram)
f1000(3); // (estrangulamento, 1000ms ainda não passaram)
f1000(2); // (regulação, 1000ms ainda não passaram)
f1000(3); // (regulação, 1000ms ainda não passaram)

// quando o tempo de 1000ms estiver esgotado...
// quando o tempo de 1000ms se esgota...
// ...exibe 3, o valor intermédio 2 foi ignorado
```

P.S. Os argumentos e o contexto `this` passados para `f1000` devem ser passados para a função original `f`.
P.S. Os argumentos e o contexto de `this` passados a `f1000` devem ser passados a `f` original.