
рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдмрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЛрдЧреЛрдВ рд╕реЗ
рд╡рдЪрди рдФрд░
рдЖрд╕реНрдердЧрд┐рдд рд╢рдмреНрдж рд╕реБрдирдиреЗ рдкрдбрд╝реЗред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдХрд╛рд░ рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреА рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдиреНрдпрд╛рдп рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛
рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрди 2 рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕рдордЭрдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдкреНрд░реЙрдорд┐рд╕ рдФрд░ рдбрд┐рдлрд░реНрдб рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдПрдХреНрд╢рди рдореЗрдВ рдбреАрдПрдлрд╝рд░реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ (рдХреЗрд╡рд▓ JQuery рдореЗрдВ рдФрд░ рди рдХреЗрд╡рд▓) рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред
рд╣рд╛рдВ, рд╢рд╛рдпрдж рдЬреЛ рд▓реЛрдЧ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣ рджреБрдЦрдж рд╣реЛрдЧрд╛ рдФрд░ рд▓рд╛рдирдд рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдкрд╣рд▓реЗ рд╣реА рдХрдИ рдмрд╛рд░ рдЪрд░реНрдЪрд╛ рд╣реЛ рдЪреБрдХреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЫреВрдиреЗ рдХреА рд╣рд┐рдореНрдордд рд╣реЛрдЧреА рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐:
1) рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреЛрд╕реНрдЯ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддреА рд╣реИред
2) рдореИрдВ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдЬрд╛рдКрдВрдЧрд╛, рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдирд╣реАрдВред рдореЗрд░рд╛ рдХрд╛рд░реНрдп рдЙрдкрдХрд░рдг рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдВрдХ рдореЗрдВ рдкрд╛рдПрдВрдЧреЗред
рдиреАрдЪреЗ рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдкреНрд░реЛрдорд┐рд╕ рдФрд░ рдбрд┐рдлрд░реНрдб рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдХреБрдЫ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЫреВрдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБ рдХреНрдпрд╛ рд╣реИ? : рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдШрдЯрдирд╛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИред
рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ? : рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ AJAX рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЙрд▓рдмреИрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? : рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреГрд╖реНрда рдкрд░ рдПрдХ рдирдХреНрд╢рд╛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрдм рдЬрдм рдЙрдиреНрд╣реЗрдВ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд рд╕реЗ рдЗрд╕ рдкрд░ рд╕рднреА рдирд┐рд╢рд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реАред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдПрдХ рдкреГрд╖реНрда рдФрд░ рдПрдХ рдирдХреНрд╢рд╛ (рдЫрд┐рдкреЗ рд╣реБрдП рд░реВрдк рдореЗрдВ) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкреНрд░реАрд▓реЛрдбрд░ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдЗрд╕ рд╕рдордп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ 20 AJAX рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдХреЗрд╡рд▓ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ рдЖрдкрдХреЛ рдкреНрд░реА-рд▓реЛрдбрд░ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ, рд╕рд╛рдордЧреНрд░реА рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░, рдорд╛рд░реНрдХрд░ рдФрд░ рдмреНрд▓реЙрдХ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд░ рд╕рдорд╕реНрдпрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЧреЗ рдореИрдВ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ (рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде) рдкрд░ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдФрд░ рдореБрдЭреЗ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
1) рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рд▓реНрдХреБрд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдХреНрд▓реАрдирд░ рдФрд░ рд▓реИрдХреЛрдирд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рдеред
2)
-> рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрд░реНрде
рд╣реИ () {} рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ
3)
(рдП, рдмреА) -> рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ
рдлрд╝рдВрдХреНрд╢рди (рдП, рдмреА) {} рдХрд╛ рдорддрд▓рдм рд╣реИ
4) рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ CoffeeScript рд╕рд╛рдзрди
() рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
рд╣реИ5)
рдбреВ (рдП, рдмреА) -> "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!" in CoffeeScript рдХрд╛ рдЕрд░реНрде рд╣реИ
(рдлрд╝рдВрдХреНрд╢рди (рдП, рдмреА) {рд░рд┐рдЯрд░реНрди "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!";}) (рдП, рдмреА) рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ
рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
рдореИрдВ рдЖрд▓рд╕реА рд╣реВрдВ рдФрд░ рдЪрд╛рдмрд┐рдпреЛрдВ рдкрд░ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЙрдВрдЧрд▓рд┐рдпрд╛рдВ рдЪрдЯрдХрд╛рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕рд▓рд┐рдП,
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдореИрдВ рд╕рд┐рд░реНрдл
рд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
рд▓рд╛рдЧреВ JS рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдЖрд╡реЗрджрди рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдлрдВрдХреНрд╢рди рдореЗрдердбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ (Function.apply)ред рддреЛ, рдпрд╣ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рдЖрд╡реЗрджрди рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИ? рдЗрд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдкрд╣рд▓рд╛ рддрд░реНрдХ рддрдерд╛рдХрдерд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдВрджрд░реНрдн рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрдмрд░рди рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рджреВрд╕рд░рд╛ рддрд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рд░рдгреА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЕрдХреНрд╕рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ
fn (X1, x2, x3, x4, ...) рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдПрдХ рдЕрдЬреАрдм рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдЪрд░ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдПрдХрд▓ рд╕рд░рдгреА рдЪрд░ рдирд╣реАрдВред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ
рд▓рд╛рдЧреВ рд╡рд┐рдзрд┐ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрд╡реЗрджрди рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЪрд░ рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рд╕рднреА рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ
рддрд░реНрдХ рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдЕрдкрдиреЗ рдХрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ:
window.log = -> try console.log.apply(console, arguments)
рдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг window.log = function() { try { return console.log.apply(console, arguments); } catch (_error) {} };
рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ? рдореИрдВрдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ рдПрдХ
рд▓реЙрдЧ рд╡рд┐рдзрд┐ рдмрдирд╛рдИред рд╕рднреА рддрд░реНрдХ рдЬреЛ рдореБрдЭреЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдореИрдВ
рд▓реЙрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдореИрдВ рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдлрд╝рдВрдХреНрд╢рди (рд▓рд╛рдЧреВ рд╡рд┐рдзрд┐ рдореЗрд░реА рдорджрдж рдХрд░рддрд╛ рд╣реИ) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ
рдХрдВрд╕реЛрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ
рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ред рдРрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬрд┐рдирдХреЗ рд▓рд┐рдП
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ
, рдореИрдВ рдЦреБрдж рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред
рдХреЙрдлреА рдореЗрдВ рдХреБрдЫ рдФрд░ рдЪреАрдиреАрд░рдЦреЛ
... рддрд░реНрдХреЛрдВ рдХреЗ рдмрд╛рдж рд╕рд░рдгреА рдФрд░ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕рдВрджрд░реНрдн рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдмрдЪрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдХреЛрдб рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдХреЗ рд╕рдорд╛рди рд╣реИред
window.log = -> try console.log arguments...
рдпрджрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рддреЛ рд╣рдо рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рдореБрдЭреЗ рд╕рд┐рд░реНрдл
рдЖрд╡реЗрджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рдерд╛ - рдпрд╣ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
рдЪрд░рдг 1. рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдорд╕реНрдпрд╛
10 рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдкрд░, рд╡рд╣ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдореБрдЦреНрдп рдзрд╛рд░рд╛ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ "рдЕрдкрдирд╛ рдЬреАрд╡рди рдЬреАрддрд╛ рд╣реИ"ред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдврд╝рд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓рд╛ред
рдЪрд▓реЛ рдПрдХ рд╕рд░рд▓ рд▓реВрдк рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ 10 рдмрд╛рд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░
рдЗрдВрдбреЗрдХреНрд╕ рдЪрд░ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВред
for index in [0...10] setTimeout -> log index , 1000
рдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг var index, _i; for (index = _i = 0; _i < 10; index = ++_i) { setTimeout(function() { return log(index); }, 1000); }
рдареАрдХ рдПрдХ рд╕реЗрдХрдВрдб рдмрд╛рдж, рд╣рдореЗрдВ
"0 1 2 3 4 5 6 7 8 9" рдирдВрдмрд░ рдирд╣реАрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди
"10 10 10 10 10 10 10 10 10 10 10" ред
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рддрдХ
рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдЪрдХреНрд░ рдкрд╣рд▓реЗ рд╣реА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рдХрд╛рдо рдХрд░реЗрдЧрд╛), рдФрд░
рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛рдЙрдВрдЯрд░ рдЗрд╕ рдХреНрд╖рдг рддрдХ рдПрдХ рдЪрд░рдо рдореВрд▓реНрдп рд▓реЗрдЧрд╛ рдФрд░ 10 рд╣реЛрдЧрд╛ред
рдЪрд░рдг 2. рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдорд╛рдзрд╛рди
рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдФрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ред рджреЗрдЦрд╛! рдХреЙрдлреА рдХреА рдкрдЯрдХрдерд╛ рдореЗрдВ, рдЗрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд╛рдлреА рд╢рд╛рди рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
for index in [0...10] do (index) -> setTimeout -> log index , 1000
рдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг var index, _fn, _i; _fn = function(index) { return setTimeout(function() { return log(index); }, 1000); }; for (index = _i = 0; _i < 10; index = ++_i) { _fn(index); }
рдЪрд░рдг 3. рдХрд╛рдо рдХреИрд╕реЗ рд╕реНрдердЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рд░реЛрд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдПрдХ рднрдВрдбрд╛рд░ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдРрд╕реА рдХрдИ рд╢рд░реНрддреЗрдВ рд╣реИрдВ:
-
рд▓рдВрдмрд┐рдд - рд▓рдВрдмрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реНрдг
-
рдЕрд╕реНрд╡реАрдХреГрдд - рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрд░реИрд╢ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ
-
рд╣рд▓ - рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реА рд╣реБрдИ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЖрд╕реНрдердЧрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
.resolve () рд╡рд┐рдзрд┐ред
рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЬрд┐рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рд╣рдо рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИред
рдЗрд╕рд╕реЗ рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:
1) рдПрдХ рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБ рдмрдирд╛рдПрдБ
2) рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдЗрдЪреНрдЫрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдЪреНрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
3) рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╣рдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрд╣реАрдВ рдкрд░ рдкрд╛рд╕ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЙрд╕рдХреЗ рд░рд╛рдЬреНрдп рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдиреАрдЪреЗ рдЖрдкрдХреЛ рд╡рд╣ рдХреЛрдб рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрдЪреНрдЫреБрдХ рдкрд╛рдардХ рдХреА рджрдпрд╛ рдкрд░ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЫреЛрдбрд╝рддрд╛ рд╣реВрдВред
рд╡рд╛рдкрд╕реА рдХреЗ рд▓рд┐рдП dfd.promise (), рдирдореВрдирд╛ рдХреЛрдб рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдкрдврд╝реЗрдВред
for index in [0...10] promise = do (index) -> dfd = new $.Deferred() setTimeout -> log index dfd.resolve() , 1000 return dfd.promise()
рдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг var index, promise, _i; for (index = _i = 0; _i < 10; index = ++_i) { promise = (function(index) { var dfd; dfd = new $.Deferred(); setTimeout(function() { log(index); return dfd.resolve(); }, 1000); return dfd.promise(); })(index); }
рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЗрди
рд░рд┐рдЯрд░реНрди dfd.promise () рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдПрдХ рдЙрдЪрд┐рдд рд╕рд╡рд╛рд▓ рдкреВрдЫреЗрдВрдЧреЗ: "рдХреНрдпреЛрдВ рд╕рдорд╛рд░реЛрд╣ рд╕реЗ рд▓реМрдЯрддреЗ рд╕рдордп, рдпрд╣ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣
рд╡рд╛рджрд╛ рд╣реИ ?"ред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдПрдХ рдЖрд╕реНрдердЧрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЙрди рд╕рднреА рддрд░реАрдХреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╣реАрдВ рд╕реЗ рднреА, рдПрдХ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдиреБрдордд рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдПрдХ рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рдЕрдВрддрд┐рдо рдбреЗрд╡рд▓рдкрд░ рдкреНрд░рд▓реЛрднрди рдХрд╛ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рджрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╡рд╛рджрд╛ рд╕рд┐рд░реНрдл рдЖрд╕реНрдердЧрд┐рдд рдХреА рдПрдХ рдЫрдВрдЯрдиреА рдкреНрд░рддрд┐ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИред
рдЪрд░рдг 4. рд╣рдо "рд╡рд╛рджреЛрдВ" рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╣реИрдВ
рдЕрдЧрд░ рд╣рдореЗрдВ 10 рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдмрд╕ "рд╡рд╛рджреЛрдВ" рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╣реИрдВ (рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдХреБрдЫ рд╕рдордп рдореЗрдВ рдЕрдкрдиреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВ), рдЬреЛ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдмрдирддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдПрдХ рдирдпрд╛ "рд╡рд╛рджрд╛" рдХрд░рддреЗ рд╣реИрдВред
promises_ary = [] for index in [0...10] promise = do (index) -> dfd = new $.Deferred() setTimeout -> log index dfd.resolve() , 1000 dfd.promise() promises_ary.push promise log promises_ary
рдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг var index, promise, promises_ary, _i; promises_ary = []; for (index = _i = 0; _i < 10; index = ++_i) { promise = (function(index) { var dfd; dfd = new $.Deferred(); setTimeout(function() { log(index); return dfd.resolve(); }, 1000); return dfd.promise(); })(index); promises_ary.push(promise); } log(promises_ary);
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк,
рд▓реЙрдЧ рд╣рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджрд┐рдЦрд╛рдПрдЧрд╛ред
# => [obj, obj, ...]
рдЪрд░рдг 5. рд╣рдо "рд╡рд╛рджреЛрдВ" рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
рдФрд░ рдЕрдм рдПрдХ рдХреЙрд▓рдмреИрдХ рдХреЛ рд▓рдЯрдХрд╛ рджреЗрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдЬрд┐рд╕реЗ рд╕рднреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ
$ jQuery рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
$ .When рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рд╡рд░реНрдгрди рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдирдкреБрдЯ рдкрд░
рд╡рд╛рджреЛрдВ_рд░реА рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реИ, рд╣рдо рдлрд┐рд░ рд╕реЗ
рд▓рд╛рдЧреВ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
promises_ary = [] for index in [0...10] promise = do (index) -> dfd = new $.Deferred() setTimeout -> log index dfd.resolve() , 1000 dfd.promise() promises_ary.push promise $.when.apply($, promises_ary).done -> log 'Promises Ary is Done'
рдЪрд░рдг 6. рдереЛрдбрд╝рд╛ рдореМрдХрд╛
рдЕрдВрдд рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдереЛрдбрд╝рд╛ "рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛" рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдПрдХ рд╕рд░рд▓
рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд▓реМрдЯрд╛рдПрдЧреА рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рд┐рд▓рдВрдм рдХреЗ рд╕рд╛рде рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧреАред
rand = (min, max) -> Math.floor(Math.random() * (max - min + 1) + min) promises_ary = [] for index in [0...10] promise = do (index) -> dfd = new $.Deferred() setTimeout -> log index dfd.resolve() , rand(1, 5) * 1000 dfd.promise() promises_ary.push promise $.when.apply($, promises_ary).done -> log 'Promises Ary is Done'
рдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг var index, promise, promises_ary, _i; rand = function(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); }; promises_ary = []; for (index = _i = 0; _i < 10; index = ++_i) { promise = (function(index) { var dfd; dfd = new $.Deferred(); setTimeout(function() { log(index); return dfd.resolve(); }, rand(1, 5) * 1000); return dfd.promise(); })(index); promises_ary.push(promise); } $.when.apply($, promises_ary).done(function() { return log('Promises Ary is Done'); });
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдпрд╣ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 1.5 рдХреЗ рдмрд╛рдж рд╕реЗ jQuery рдХреЗ рд╕рднреА AJAX рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдФрд░ рднреА рд╕рд░рд▓ рд╣реИред
рдореИрдВ рдпрд╣реАрдВ рд░реБрдХ рдЬрд╛рдКрдВрдЧрд╛ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕реНрд░реЛрддреЛрдВ рд╕реЗ Deferred / Promise рддрдХрдиреАрдХ рдХрд╛ рдЧрд╣рди рдЕрдзреНрдпрдпрди рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдкреЛрд╕реНрдЯ рдПрдХ рджрд┐рди рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддреА рд╣реИред
- рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБ (jQuery рдХреЗ рдЕрдзрд┐рдХрд╛рд░реА)
- jQuery рдХреЗ рдЖрд╕реНрдердЧрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ (Habr)
- JQuery 1.5 (Habr) рдореЗрдВ рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- рдХреЙрдордирдЬрд╕ рдкреНрд░реЙрдорд┐рд╕
- AngularJS (рд╡рд╛рджрд╛ / рд╕реНрдердЧрд┐рдд)
- AngularJS рдореЗрдВ рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБрдПрдВ
- рдПрдВрдЧреБрд▓рд░рдЬреЗрдПрд╕ рдореЗрдВ рд╡рд╛рджрд╛
- рдПрдХреНрд╢рдирд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.0 рдХреЗ рд▓рд┐рдП рд╡рд╛рджреЗ
- рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБ
рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрди: рдЕрдХреНрд╕рд░ рдпрд╣ рдХрдерди рдкреВрд░рд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрд╕реНрдердЧрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЗ рд╕рд╛рде рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдореБрдЭреЗ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╛рдо рдЖ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рди рдЕрднреНрдпрд╛рд╕ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред
рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрди: рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдБ рдЖрдкрдиреЗ рдбрд┐рдлрд░реНрдб / рдкреНрд░реЙрдорд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред