рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯрд╛рдЗрдорд░: рдЖрдк рд╕рднреА рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдирдорд╕реНрдХрд╛рд░ рд╕рд╛рдерд┐рдпреЛрдВ! рдПрдХ рдмрд╛рд░, рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЬреЙрди рд░реЗрдЬрд┐рдЧ рджреНрд╡рд╛рд░рд╛ рд╣реИрдмреЗ рдкрд░ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред 10 рд╕рд╛рд▓ рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рдореАрд░ рдмреБрдирд╛ рдХреЗ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рди рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЯрд╛рдЗрдорд░ (рдиреЛрдб.рдЬреЗрдПрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рдХрд╛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЕрд╡рд▓реЛрдХрди рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрди рдкрд░ рдХрд╛рд░реНрдп рднреА рдХрд░рддрд╛ рд╣реИред




рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдПрдХ рдПрдХрд▓ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдЯреНрд╡реАрдЯ рдХрд┐рдпрд╛:

тАЬрд╕реЗрдЯрдЯрд╛рдЗрдо рдФрд░ рд╕реЗрдЯ рдЗрдиреНрдЯрд░рд╡рд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рд╕реЛрд░реНрд╕ рдХреЛрдб рдХрд╣рд╛рдБ рд╣реИ? рдЖрдк рдЙрд╕рдХреА рддрд▓рд╛рд╢ рдХрд╣рд╛рдВ рдХрд░реЗрдВрдЧреЗ? рдЖрдк рдЗрд╕реЗ :) рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ

*** рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдЙрддреНрддрд░ рджреЗрдВ, рдФрд░ рдлрд┐рд░ *** рдкрд░ рдкрдврд╝реЗрдВ



рдЗрд╕ рдЯреНрд╡реАрдЯ рдкрд░ рд▓рдЧрднрдЧ рдЖрдзреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдЧрд▓рдд рдереАрдВред рдирд╣реАрдВ, рдорд╛рдорд▓рд╛ V8 (рдпрд╛ рдЕрдиреНрдп VMs) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ !!! setTimeout рдФрд░ setInterval рдЬреИрд╕реЗ рдХрд╛рд░реНрдп, рдЬрд┐рдиреНрд╣реЗрдВ рдЧрд░реНрд╡ рд╕реЗ "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯрд╛рдЗрдорд░" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА ECMAScript рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЬрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВред рдЯрд╛рдЗрдорд░ рдлрд╝рдВрдХреНрд╢рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрддрд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЯрд╛рдЗрдорд░ рднреА рдореВрд▓ рд░реВрдк рд╕реЗ Node.js. рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ, рдореБрдЦреНрдп рдЯрд╛рдЗрдорд░ рдлрд╝рдВрдХреНрд╢рди Window рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рднреА рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдореБрдЦреНрдп рджрд╛рдпрд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ setTimeout рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реАрдзреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдиреЛрдб рдореЗрдВ, рдЯрд╛рдЗрдорд░ global рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рдЬрд┐рд╕реЗ Window рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рддрд░рд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдиреЛрдб рдореЗрдВ рдЯрд╛рдЗрдорд░ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рдХрд┐рд╕реА рдХреЛ рдпрд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдмреБрд░рд╛ рд╕рд╡рд╛рд▓ рд╣реИ - рдпрд╣ рдЬрд╛рдирдирд╛ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ! рдореИрдВ, рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрддрд╛ рд╣реВрдВ: рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдкрд░реАрдд рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд╛рдлреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ рдХрд┐ рд╡реА 8 (рдФрд░ рдЕрдиреНрдп рдЖрднрд╛рд╕реА рдорд╢реАрдиреЗрдВ) рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдФрд░ рдиреЛрдб рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреА рд╣реИрдВред

рдЖрдЗрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рдХреБрдЫ рдЯрд╛рдЗрдорд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ?

рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдореЗрд░реЗ рдЧреЗрдЯрд┐рдВрдЧ рд╕реНрдЯрд╛рд░реНрдЯ рд╡рд┐рдж рдиреЙрдб.рдЬреЗрдПрд╕ рдХреЛрд░реНрд╕ рдСрди рдкреНрд▓реБрд░рд▓рд┐рдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рдереЗред

рдЖрд╕реНрдердЧрд┐рдд рд╕рдорд╛рд░реЛрд╣ рдирд┐рд╖реНрдкрд╛рджрди

рдЯрд╛рдЗрдорд░ рдЙрдЪреНрдЪ-рдХреНрд░рдо рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЖрдк рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рдпрд╛ рджреЛрд╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЯрд╛рдЗрдорд░ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ)ред

рдпрд╣рд╛рдБ рдЖрд╕реНрдердЧрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 // example1.js setTimeout( () => { console.log('Hello after 4 seconds'); }, 4 * 1000 ); 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, setTimeout рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП setTimeout рдЧреНрд░реАрдЯрд┐рдВрдЧ рд╕рдВрджреЗрд╢ 4 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рд▓рдВрдмрд┐рдд рд╣реИред setTimeout рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реНрдХ рджреЗрд░реА (рдПрдордПрд╕ рдореЗрдВ) рд╣реИред рдореИрдВ 4 рд╕реЗрдХрдВрдб рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП 1000 рд╕реЗ 4 рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реВрдВред

setTimeout рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рд╣реЛрдЧреАред
рдпрджрд┐ рдЖрдк рдиреЛрдб рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде example1.js рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдиреЛрдб 4 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд░реБрдХ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рдПрдХ рд╕реНрд╡рд╛рдЧрдд рд╕рдВрджреЗрд╢ (рдПрдХ рдирд┐рдХрд╛рд╕ рджреНрд╡рд╛рд░рд╛ рдкреАрдЫрд╛) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: setTimeout рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╕рд┐рд░реНрдл рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрджрд░реНрдн рд╣реИ ред рдпрд╣ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЬреИрд╕реЗ рдХрд┐ example1.js ред рдпрд╣рд╛рдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 const func = () => { console.log('Hello after 4 seconds'); }; setTimeout(func, 4 * 1000); 

рддрд░реНрдХ рдкрд╛рд╕ рдХрд░рдирд╛

рдпрджрд┐ рдЬрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП setTimeout рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЗрд░реА рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣ рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕реЗрдЯ setTimeout рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢реЗрд╖ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдпрдВ (2 рдХреЗ рдмрд╛рдж рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╕реАрдЦрд╛ рд╣реИ) рдХреЛ рддрд░реНрдХреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЖрд╕реНрдердЧрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 // : func(arg1, arg2, arg3, ...) //  : setTimeout(func, delay, arg1, arg2, arg3, ...) 

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 // example2.js const rocks = who => { console.log(who + ' rocks'); }; setTimeout(rocks, 2 * 1000, 'Node.js'); 

рдЙрдкрд░реЛрдХреНрдд rocks рдХрд╛рд░реНрдп, 2 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рд▓рдВрдмрд┐рдд рд╣реЛрддрд╛ рд╣реИ, who рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ setTimeout рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдорд╛рди "Node.js" рдРрд╕реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрддрд╛ рд╣реИред

node рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде example2.js рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╡рд╛рдХреНрдпрд╛рдВрд╢ "Node.js рдЪрдЯреНрдЯрд╛рдиреЛрдВ" рдХреЛ 2 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЯрд╛рдЗрдорд░ рдЯрд╛рд╕реНрдХ # 1

рдЗрд╕рд▓рд┐рдП, setTimeout рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЕрдзреНрдпрдпрди рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рджреЗрд░реА рдХреЗ рдмрд╛рдж 2 рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред

  • рд╕рдВрджреЗрд╢ "рд╣реИрд▓реЛ 4 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж" 4 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
  • рд╕рдВрджреЗрд╢ "8 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рд╣реИрд▓реЛ" 8 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдмрдВрдзрди

рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ, рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдИ setTimeout рдХреЙрд▓ рдХреЛ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдирд┐рд░реНрдгрдп

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реВрдВрдЧрд╛:

 // solution1.js const theOneFunc = delay => { console.log('Hello after ' + delay + ' seconds'); }; setTimeout(theOneFunc, 4 * 1000, 4); setTimeout(theOneFunc, 8 * 1000, 8); 

рдореЗрд░реЗ рд▓рд┐рдП, theOneFunc delay рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕рдВрджреЗрд╢ рдореЗрдВ рдЗрд╕ delay рддрд░реНрдХ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХрд┐рддрдиреА рджреЗрд░реА рд╕реЗ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗред

рддрдм рдореИрдВрдиреЗ рджреЛ theOneFunc рдХреЙрд▓ рдореЗрдВ theOneFunc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдкрд╣рд▓реА рдХреЙрд▓ 4 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдФрд░ рджреВрд╕рд░реА 8 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдирд┐рдХрд╛рд▓ рджреА рдЧрдИред рдЗрди рджреЛрдиреЛрдВ setTimeout рдХреЙрд▓ рдХреЛ рднреА рдПрдХ 3 рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ theOneFunc рд▓рд┐рдП delay рддрд░реНрдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рдиреЛрдб рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде solution1.js рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдХрд╛рд░реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдкрд╣рд▓рд╛ рд╕рдВрджреЗрд╢ 4 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдФрд░ рджреВрд╕рд░рд╛ 8 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдЕрд╕реАрдорд┐рдд рд╕рдордп рдХреЗ рд▓рд┐рдП рд╣рд░ 4 рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рд╣реИ?
рдмреЗрд╢рдХ, рдЖрдк рд╕реЗрдЯ setTimeout рдХреЛ рдПрдХ рд▓реВрдк рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдорд░ рдПрдкреАрдЖрдИ setInterval рдлрд╝рдВрдХреНрд╢рди рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрд╢рди рдХреЗ "рдЕрдирдиреНрдд" рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рд╕реЗрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 // example3.js setInterval( () => console.log('Hello every 3 seconds'), 3000 ); 

рдпрд╣ рдХреЛрдб рд╣рд░ 3 рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк node рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде example3.js рдирд┐рд╖реНрдкрд╛рджрд┐рдд example3.js , рддреЛ рдиреЛрдб рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рддрдм рддрдХ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддреЗ (CTRL + C)ред

рдЯрд╛рдЗрдорд░ рд░рджреНрдж рдХрд░реЗрдВ

рдЪреВрдВрдХрд┐ рдЯрд╛рдЗрдорд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдПрдХреНрд╢рди рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдПрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рднреА рдкреВрд░реНрд╡рд╡рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

setTimeout рдХреЙрд▓ рдЯрд╛рдЗрдорд░ рдЖрдИрдбреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдЯрд╛рдЗрдорд░ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП clearTimeout рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдЖрдк рдЗрд╕ рдЯрд╛рдЗрдорд░ рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 // example4.js const timerId = setTimeout( () => console.log('You will not see this one!'), 0 ); clearTimeout(timerId); 

рдЗрд╕ рд╕рд╛рдзрд╛рд░рдг рдЯрд╛рдЗрдорд░ рдХреЛ 0 рдПрдордПрд╕ (рдпрд╛рдиреА, рддреБрд░рдВрдд) рдХреЗ рдмрд╛рдж рдлрд╛рдпрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо timerId рдХреЗ рдорд╛рди рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ timerId рдХреЛ timerId рдХрд░рдХреЗ рддреБрд░рдВрдд рдЗрд╕ рдЯрд╛рдЗрдорд░ рдХреЛ рд░рджреНрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред

node рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде example4.js рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдиреЛрдб рдХреБрдЫ рднреА рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ - рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╕ рддреБрд░рдВрдд рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧреАред

рд╡реИрд╕реЗ, Node.js 0 рдПрдордПрд╕ рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде setTimeout рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред Node.js рдЯрд╛рдЗрдорд░ API рдореЗрдВ setImmediate рдирд╛рдордХ рдПрдХ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдФрд░ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ 0 рдПрдордПрд╕ рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде setImmediate рдХреЗ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рджреЗрд░реА рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

 setImmediate( () => console.log('I am equivalent to setTimeout with 0 ms'), ); 

рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ setImmediate рдлрд╝рдВрдХреНрд╢рди рд╕рдорд░реНрдерд┐рдд setImmediate рд╣реИ ред рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред

clearInterval рдХреЗ рд╕рд╛рде clearTimeout рдПрдХ clearInterval рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд╕рдорд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди setInerval рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рдФрд░ рдПрдХ clearImmediate рдХреЙрд▓ рднреА рд╣реИред

рдЯрд╛рдЗрдорд░ рджреЗрд░реА - рдПрдХ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ

рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, 0 рдПрдордПрд╕ рдХреЗ рдмрд╛рдж setTimeout рд╕рд╛рде рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдСрдкрд░реЗрд╢рди рддреБрд░рдВрдд ( setTimeout рдмрд╛рдж) рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж ( clearTimeout рдХреЙрд▓ рд╕рд╣рд┐рдд)?

рдЗрд╕ рдмрд╛рдд рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ setTimeout рдХреЙрд▓ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдзреЗ рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:

 // example5.js setTimeout( () => console.log('Hello after 0.5 seconds. MAYBE!'), 500, ); for (let i = 0; i < 1e10; i++) { //    } 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЯрд╛рдЗрдорд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд╣рдо рд▓реВрдк рдХреЗ for рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВред 1e10 рдХрд╛ рдореВрд▓реНрдп 10 рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде 1 рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЪрдХреНрд░ 10 рдмрд┐рд▓рд┐рдпрди рдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрдХреНрд░ рддрдХ рд░рд╣рддрд╛ рд╣реИ (рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдПрдХ рдЕрддрд┐рднрд╛рд░рд┐рдд рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ рд▓реВрдк рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдиреЛрдб рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдмреЗрд╢рдХ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ setTimeout рджреЗрд░реА рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рд╣реИ ред 500 рдПрдордПрд╕ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рджреЗрд░реА рдХрдо рд╕реЗ рдХрдо 500 рдПрдордПрд╕ рд╣реЛрдЧреАред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕реНрд╡рд╛рдЧрдд рд░реЗрдЦрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдкрд╣рд▓реЗ, рдЙрд╕реЗ рдЕрд╡рд░реБрджреНрдз рдЪрдХреНрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЯрд╛рдЗрдорд░ рд╕рдорд╕реНрдпрд╛ # 2

рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВ, рдЬреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдПрдХ рдмрд╛рд░ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреА, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ 5 рдмрд╛рд░ред 5 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ "рдкреВрд░реНрдг" рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рд╣реЛ рдЬрд╛рдПрдЧреАред

рд╕реАрдорд╛ : рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордп, рдЖрдк setTimeout рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рд╕рдВрдХреЗрдд : рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдирд┐рд░реНрдгрдп

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реВрдВрдЧрд╛:

 let counter = 0; const intervalId = setInterval(() => { console.log('Hello World'); counter += 1; if (counter === 5) { console.log('Done'); clearInterval(intervalId); } }, 1000); 

рдореИрдВрдиреЗ counter рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ 0 рд╕реЗрдЯ рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ setInterval рдХрд╣рд╛, рдЬреЛ рдЗрд╕рдХреА рдЖрдИрдбреА рд▓реЗрддрд╛ рд╣реИред

рдЖрд╕реНрдердЧрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдмрдврд╝рд╛рдПрдЧрд╛ред рдЖрд╕реНрдердЧрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ if рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИ, рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ 5 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд╣рд▓реЗ рд╣реА рдкрд╛рд░рд┐рдд рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред 5 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдпрдХреНрд░рдо "рдкреВрд░реНрдг" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП intervalId рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдорд╛рди рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрд░рд╛рд▓ рджреЗрд░реА 1000 рдПрдордПрд╕ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╕реНрдердЧрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреМрди рдХрд╣рддрд╛ рд╣реИ?

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ this , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:

 function whoCalledMe() { console.log('Caller is', this); } 

this рдХрд╛ рдорд╛рди рдХреЙрд▓рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдиреЛрдб REPL рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ global рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ window , рддреЛ window рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред

рдЖрдЗрдП рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╡рд╣ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХреЗ:

 const obj = { id: '42', whoCalledMe() { console.log('Caller is', this); } }; //     : obj.whoCallMe 

рдЕрдм, рдЬрдм рд╣рдо obj.whoCallMe рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕реАрдзреЗ рдЗрд╕реЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рддреЛ obj рдСрдмреНрдЬреЗрдХреНрдЯ (рдЗрд╕рдХреА id рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдирд╛ рдЧрдпрд╛) рдХреЙрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛:



рдЕрдм рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк obj.whoCallMe рдХреЛ setTimetout рд▓рд┐рдП рд▓рд┐рдВрдХ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рддреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреМрди рд╣реЛрдЧрд╛?

 //       ?? setTimeout(obj.whoCalledMe, 0); 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреМрди рд╣реИ?

рдЯрд╛рдЗрдорд░ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрддреНрддрд░ рднрд┐рдиреНрди рд╣реЛрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдмрд╕ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рдЖрдк рдХреЙрд▓рд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдЦреЛ рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯрд╛рдЗрдорд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдиреЛрдб REPL рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Timeout рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЙрд▓рд░ рд╣реЛрдЧрд╛:



рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрдм рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ this рдЙрдкрдпреЛрдЧ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреАрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХреЙрд▓рд░ рдХреЛ рдЖрдкрдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЯрд╛рдЗрдорд░ рд╕рдорд╕реНрдпрд╛ # 3

рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреЗрд░реА рдХреЗ рд╕рд╛рде рд▓рдЧрд╛рддрд╛рд░ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧреАред рдПрдХ рд╕реЗрдХрдВрдб рдХреА рджреЗрд░реА рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдЗрд╕реЗ рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рдмрдврд╝рд╛рдПрдВред рджреВрд╕рд░реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рджреЗрд░реА 2 рд╕реЗрдХрдВрдб рд╣реЛрдЧреАред рддреАрд╕рд░реЗ рдкрд░ - рддреАрди, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕рдВрджреЗрд╢ рдореЗрдВ рджреЗрд░реА рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

Hello World. 1
Hello World. 2
Hello World. 3
...


рд╕реАрдорд╛рдПрдБ : рдЪрд░ рдХреЗрд╡рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Let рдпрд╛ var рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИред

рдирд┐рд░реНрдгрдп

рдЪреВрдБрдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ рджреЗрд░реА рдХреА рдЕрд╡рдзрд┐ рдПрдХ рдЪрд░ рдорд╛рди рд╣реИ, рдЖрдк рдпрд╣рд╛рдБ setInterval рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХреЗ рдЕрдВрджрд░ setTimeout рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред setTimeout рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдЕрдЧрд▓реЗ рдЯрд╛рдЗрдорд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдБрдХрд┐ рдЖрдк let / var рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рджреЗрд░реА рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рд╡реГрджреНрдзрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 const greeting = delay => setTimeout(() => { console.log('Hello World. ' + delay); greeting(delay + 1); }, delay * 1000); greeting(1); 

рдЯрд╛рдЗрдорд░ рдЯрд╛рд╕реНрдХ # 4

рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВ рдЬреЛ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рд╕рдВрджреЗрд╢ рдХреЛ рдЯрд╛рд╕реНрдХ # 3 рдореЗрдВ рд╕рдорд╛рди рд╡рд┐рд▓рдВрдм рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ 5 рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ, рдФрд░ рд╕рдореВрд╣ рдореЗрдВ рдПрдХ рдореБрдЦреНрдп рд╡рд┐рд▓рдВрдм рдЕрдВрддрд░рд╛рд▓ рд╣реЛрдЧрд╛ред 5 рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкрд╣рд▓реЗ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП, рд╣рдо 100 рдПрдордПрд╕ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рджреЗрд░реА рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд▓реЗ рдХреЗ рд▓рд┐рдП - 200 рдПрдордПрд╕, рддреАрд╕рд░реЗ рдХреЗ рд▓рд┐рдП - 300 рдПрдордПрд╕ рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • 100 рдПрдордПрд╕ рдореЗрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╣рд▓реА рдмрд╛рд░ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ рдРрд╕рд╛ 100 рдПрдордПрд╕ рдореЗрдВ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде 5 рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рд╕рдВрджреЗрд╢ 100 рдПрдордПрд╕, рджреВрд╕рд░рд╛ 200 рдПрдордПрд╕, рдЖрджрд┐ рдХреЗ рдмрд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
  • рдкрд╣рд▓реЗ 5 рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рдж, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ 200 рдПрдордПрд╕ рджреНрд╡рд╛рд░рд╛ рдореБрдЦреНрдп рджреЗрд░реА рдХреЛ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, 6 рд╡рд╛рдВ рд╕рдВрджреЗрд╢ 500 рдПрдордПрд╕ + 200 рдПрдордПрд╕ (700 рдПрдордПрд╕), 7 рд╡реЗрдВ - 900 рдПрдордПрд╕, 8 рд╡реЗрдВ рд╕рдВрджреЗрд╢ - 1100 рдПрдордПрд╕ рдХреЗ рдмрд╛рдж, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • 10 рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рдж, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдореБрдЦреНрдп рд╡рд┐рд▓рдВрдм рдЕрдВрддрд░рд╛рд▓ рдХреЛ 300 рдПрдордПрд╕ рд╕реЗ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред 11 рд╡реЗрдВ рд╕рдВрджреЗрд╢ рдХреЛ 500 рдПрдордПрд╕ + 1000 рдПрдордПрд╕ + 300 рдПрдордПрд╕ (18000 рдПрдордПрд╕) рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред 12 рд╡реЗрдВ рд╕рдВрджреЗрд╢ рдХреЛ 2100 рдПрдордПрд╕, рдЖрджрд┐ рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕рдВрджреЗрд╢ рдореЗрдВ рджреЗрд░реА рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ):

Hello World. 100 // 100
Hello World. 100 // 200
Hello World. 100 // 300
Hello World. 100 // 400
Hello World. 100 // 500
Hello World. 200 // 700
Hello World. 200 // 900
Hello World. 200 // 1100
...


рд╕реАрдорд╛рдПрдБ : рдЖрдк рдХреЗрд╡рд▓ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ setInterval (рдФрд░ setTimeout рдирд╣реАрдВ) рдФрд░ рдХреЗрд╡рд▓ рдПрдХ if ред

рдирд┐рд░реНрдгрдп

рдЪреВрдБрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ setInterval рдХреЙрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рд╣рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓реЗ рд╕реЗрдЯ setInterval рдХреЙрд▓ рдХреА рджреЗрд░реА рдХреЛ рднреА рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдЗрд╕ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ 5 рдХреЙрд▓ рдХреЗ рдмрд╛рдж рд╣реА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП if рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ:

 let lastIntervalId, counter = 5; const greeting = delay => { if (counter === 5) { clearInterval(lastIntervalId); lastIntervalId = setInterval(() => { console.log('Hello World. ', delay); greeting(delay + 100); }, delay); counter = 0; } counter += 1; }; greeting(100); 

рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/hi426709/


All Articles