CoffeeScript: рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╕рд╛рдЗрдХрд┐рд▓ рдЧрд╛рдЗрдб

CoffeeScript: рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╕рд╛рдЗрдХрд┐рд▓ рдЧрд╛рдЗрдб

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред



рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рднрд╛рд╖рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдФрд░ рд╕рднреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЧреИрд░-рдорд╛рдирдХ рдЪрдХреНрд░ рдмрди рдЬрд╛рдирд╛ рдПрдХ рдмрдбрд╝реА рдЪреБрдиреМрддреА рд╣реИред









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



рд╕рднреА рдХреЛрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рддреБрд▓рдирд╛рддреНрдордХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИрдВред




рд╢рд┐рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП


рдЪрд▓реЛ рд▓реВрдк рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:



for (var i = 0; i < 10; i++) { //... } 

рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛:



 for i in [0...10] 

рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 0 ... 10 рдХрд╛ рдЕрд░реНрде рд╣реИ: рд▓реВрдк рдХреЗ 10 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рдиред


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ I <= 10 ?



 for i in [0..10] 

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реАрдорд╛ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред



рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:



 for (var i = 0; i <= 10; i++) { //... } 

рдпрджрд┐ рд░реЗрдВрдЬ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдЕрдВрддрд┐рдо [10..0] рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЙрд▓реНрдЯреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЙрд▓реНрдЯрд╛ рдЪрдХреНрд░ рдорд┐рд▓реЗрдЧрд╛:



 for (var i = 10; i >= 0; i--) { //.. } 

рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдирдХрд╛рд░рд╛рддреНрдордХ рд╢реНрд░реЗрдгреА рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ:



 for i in [-10..0] 

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЖрдк рд╕рд░рдгреА рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рдиреЛрдВ рд╕реЗ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 [0..-3] #[0, -1, -2, -3] 

рдЕрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдПрди рдХреЗ рднрд╛рдЬреНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:



рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:

 var factorial = function(n) { var result = 1; for (i = 1; i <= n; i++) { result *= i; } return result; }; factorial(5) //120 


CoffeeScript:

 factorial = (n) -> result = 1 for i in [1..n] result *= i result factorial 5 #120 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдФрд░ рдкрдардиреАрдп рд╣реИред



рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



 factorial = (n) -> result = 1 result *= i for i in [1..n] result 

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдпрд╣ рддрдереНрдпрд╛рддреНрдордХ рдЧрдгрдирд╛ рдХрд╛ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред



[...]

рдореИрдВ рдЦреБрдж рдХреЛ рд╡рд┐рд╖рдп рд╕реЗ рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЖрд╡реЗрджрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реВрдВ [...] (рд╕реНрд▓рд╛рдЗрд╕) ред



рдХрднреА-рдХрднреА рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рд╕реЗ рдЖрдк рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдЬреИрд╕рд╛ рдХреБрдЫ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:



 'a,b,c'[''...][0] 

рдЬреЛ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛:



 'a,b,c'.slice('')[0]; //a 

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕реНрд▓рд╛рдЗрд╕ рд╕реЗ рдЕрд▓рдЧ рд░реЗрдВрдЬ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рджреЛ рдореБрдЦреНрдп рдЕрдВрддрд░ рд╣реИрдВ:



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдПрдХ рдЪрд░рдо рдореВрд▓реНрдп рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ



 [1...] 

рдпрд╣рд╛рдБ рдореИрдВ рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдЬреЛ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдЙрд╕ рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:



 var __slice = Array.prototype.slice; __slice.call(1); 

рдпрд╣ рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

 fn = -> [arguments...] fn [1..3] #0,1,2,3 


рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ CoffeeScript рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╡рд┐рдХрд▓реНрдк ( рдлреНрд▓реИрдЯреНрд╕ ) рд╣реИ:

 fn = (args...) -> args fn [1..3] #0,1,2,3 

рдЕрдВрдХрдЧрдгрд┐рдд рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ:

 [1 + 1...] 


рджреВрд╕рд░реЗ, рд╕реНрд▓рд╛рдЗрд╕ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ



 [1..10][...2] #1,2 


рддреАрд╕рд░рд╛, рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдЧрдгрдирд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ



 [1,2,3...] 

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╕рд░рд▓ рд╕рдВрдЧрддрд┐ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ:

 [1, 2].concat(Array.prototype.slice.call(3)); //[1,2,3] 

рдПрдХ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдЙрджрд╛рд╣рд░рдг:



 list1 = [1,2,3] list2 = [4,5,6] [list1, list2 ...] #[1,2,3,4,5,6] 


рд╕реВрдЪреА рдХреА рд╕рдордЭ


CoffeeScript рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕реВрдЪреА рд╕рдордЭ рд╣реИ ред



1 рд╕реЗ n рддрдХ рд╕рднреА рддрдереНрдпрд╛рддреНрдордХ рдЧрдгрдирд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 factorial = (n) -> result = 1 result *= i for i in [1..n] factorial 5 #1,2,6,24,120 

рдЕрдм рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкрд╣рд▓реЗ рдкрд╛рдВрдЪ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ:



 (i for i of location)[0...5] # hash, host, hostname, href, pathname 

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдпрд╣ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:



 var list = function() { var result = []; for (var i in location) { result.push(i); } return result; }().slice(0, 5); 

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



 foo = (value for i, value of ['a', 'b', 'c'][0...2]) # [ a, b ] 

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



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб, рдЬреЛ 0 рд╕реЗ 2 рддрдХ рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



 foo = (value for value in ['a', 'b', 'c'][0...2]) 

рдпрд╛ рддреЛ:

 ['a', 'b', 'c'].filter (value, i) -> i < 2 

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдХреГрдкрдпрд╛ рдкрджреНрдзрддрд┐ рдХреЗ рдирд╛рдо рдФрд░ рд╢реБрд░реБрдЖрддреА рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдмреАрдЪ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣ рдЕрдВрддрд░рд╛рд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реИ!

рдпрджрд┐ рдЖрдк рд╕реНрдерд╛рди рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:

 ['a', 'b', 'c'].filter(value, i)(function() { return i < 2; }); //ReferenceError: value is not defined! 

рдЕрдм, рдЖрдк рд╢рд╛рдпрдж рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВ рдХрд┐ .filter () рд╡рд┐рдХрд▓реНрдк рд╕рдмрд╕реЗ рдкрд╕рдВрджреАрджрд╛ рдХреНрдпреЛрдВ рдирд┐рдХрд▓рд╛?


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



рдкреНрд░рд╕рд╛рд░рдг рдкрд░рд┐рдгрд╛рдо:


 var i, value; [ (function() { var _ref, _results; _ref = ['a', 'b', 'c'].slice(0, 2); _results = []; for (i in _ref) { value = _ref[i]; _results.push(value); } return _results; })() ]; 

рдЖрдЗрдП рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреЛрдб рднрдпрд╛рдирдХ рд╣реИред


рдЕрдм рдлрд┐рд▓реНрдЯрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ:



 ['a', 'b', 'c'].filter(function(value, i) { return i < 2; }); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ рдЖрджрд░реНрд╢ рдФрд░ рдХреБрд╢рд▓ рдХреЛрдб рдорд┐рд▓рд╛ рд╣реИ!



рдпрджрд┐ рдЖрдк рд╕рд░реНрд╡рд░ рдкрд░ CoffeeScript рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ IE9- рдлрд╝рд┐рд▓реНрдЯрд░ рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рд╣реА рдЗрд╕рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП!



рдлрд┐рд░ рдСрдкрд░реЗрдЯрд░


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рд░реНрд╕рд░ рдЗрдВрдбреЗрдВрдЯ, рд▓рд╛рдЗрди рдмреНрд░реЗрдХ, рдХреИрд░рд┐рдЬ рд░рд┐рдЯрд░реНрди рдЗрддреНрдпрд╛рджрд┐ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 1 рд╕реЗ n рдХреЛ рджреЛ рдХреА рд╢рдХреНрддрд┐ рддрдХ рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрдХреНрд░ рд╣реИ:



 for i in [1...10] i * i 

рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд▓рд╛рдЗрди рдлреАрдб рдФрд░ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ:



 for i in [1...10] then i * i 

рдХреБрдЫ рд╕рдордп рдореЗрдВ , рдЕрдЧрд░ / рдФрд░ , рдФрд░ рдЬрдм / рдЬрдм рдмрдпрд╛рди, рддрдм рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкрд╛рд░реНрд╕рд░ рдХреЛ рднрд╛рд╡реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИред



рд╕рдВрдЪрд╛рд▓рдХ рджреНрд╡рд╛рд░рд╛


рдЗрд╕ рдмрд┐рдВрджреБ рддрдХ, рд╣рдордиреЗ рдХреЗрд╡рд▓ " рд╕рд░рд▓ " рдЪрдХреНрд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдм рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪрд░рдг рдореЗрдВ рд▓рд╛рдкрддрд╛ рдореВрд▓реНрдпреЛрдВ рд╡рд╛рд▓реЗ рдЪрдХреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред



рд╣рдо рдХреЗрд╡рд▓ 2 рд╕реЗ 10 рддрдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВрдЧреЗ:



 alert i for i in [0..10] by 2 #0,2,4,6,8,10 

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдпрд╣ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:



 for (var i = 2; i <= 10; i += 2) { alert(i); } 

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



рд╣рдо рди рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдХрд┐рд╕реА рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 [i for i in 'Hello World' by 3] #H,l,W,l 

рддрдм рдФрд░ рдлрд┐рд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



 [for i in 'hello world' by 1 then i.toUpperCase()] # H,E,L,L,O, ,W,O,R,L,D 

рдпрджреНрдпрдкрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝рд╛ рджреВрд░ рдХреА рдмрд╛рдд рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ " рдПрдХ рдореЗрдВ " рдХрджрдо рдХреЛ рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рднреА, рддрддреНрдХрд╛рд▓реАрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рдВрдпреБрдХреНрдд рдХрд╛рдо рд╕реЗ рд╣рдореЗрдВ рдмрд╣реБрдд рдХреЙрдореНрдкреИрдХреНрдЯ рдФрд░ рдХреБрд╢рд▓ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред



рдЦреБрдж рдХрд╛ рд╕рдВрдЪрд╛рд▓рдХ


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдХреНрд╕рд░ .hasOwnProperty () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

 var object = { foo: 1 }; object.constructor.prototype.bar = 1; console.log('bar' in object); // true console.log(object.hasOwnProperty('bar')); // false 

рдлреЙрд░-рдЗрди рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ .hasOwnProperty () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 var object = { foo: 1 }; object.constructor.prototype.toString = function() { return this.foo; }; for (i in object) { if (object.hasOwnProperty(i)) { console.log(i); //foo } } 

рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╣рдордиреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ .toString () рдкрджреНрдзрддрд┐ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдпрд╣ рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрджреНрдпрдкрд┐ рдЗрд╕реЗ рд╕реАрдзреЗ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 object.toString() //1 

CoffeeScript рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

 object = foo: 1 object.constructor::toString = -> @foo for own i of object console.log i #foo 

рдпрджрд┐ рдЖрдкрдХреЛ рдХрдерди рдХреА рджреВрд╕рд░реА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

 for own key, value of object console.log '#{key}, #{value}' #foo, 1 


рд╕рд╢рд░реНрдд рдпрджрд┐ / рдЕрдиреНрдпрдерд╛ рдХрдерди


рдЕрдм рдореИрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬреЛ рдХрд┐ / рдЕрдиреНрдп рдХрдердиреЛрдВ рдХреЗ рд╕рд╛рде рд▓реВрдк рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред



рдХрднреА-рдХрднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╣рдо рд╕рдорд╛рди рдХреЛрдб рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВ:



 for (var i = 0; i < 10; i++) if (i === 1) break; 

рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдВрджрд╛ рдХрд░реЗрдВрдЧреЗред


рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдмреНрдпрд╛рдЬ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ CoffeeScript рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦрдирд╛ рд╣реИред



рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ:



 for i in [0..10] if i is 1 break # Parse error on line 1: Unexpected 'TERMINATOR' 

рдареАрдХ рд╣реИ ..., рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЯрд░реНрдорд┐рдирд▓ рдорд╛рди рдХрд╛ рд╡рд┐рд╡рд░рдг рдпрджрд┐ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛!



рдкрд┐рдЫрд▓реА рд╕рд╛рдордЧреНрд░реА рд╕реЗ, рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рд╣рдо рддрддреНрдХрд╛рд▓реАрди рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 for i in [0..10] then if i is 1 break #Parse error on line 1: Unexpected 'POST_IF' 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реА, рд╣рдо рдлрд┐рд░ рд╕реЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рджреЗрдЦрддреЗ рд╣реИрдВред



рдЖрдЗрдП рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ ...


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



 for i in [0..10] then if i is 1 then break 

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдорд┐рд▓рддреЗ рд╣реИрдВ:



 for (i = 0; i <= 10; i++) { if (i === 1) { break; } } 

рдХрднреА-рдХрднреА рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрдм рдЪрдХреНрд░ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд╕реАред рдПрд▓ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реНрдерд┐рддрд┐:



 if (foo === true) { for (i = 0; i <= 10; i++) { if (i === 1) { break; } } } 

рдЧреИрд░ - рдирд┐рдпрддрд╛рддреНрдордХ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рд╕реВрдЪреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 (if i is 1 then break) for i in [0..10] if foo is on 

рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдордиреЗ рддрддреНрдХрд╛рд▓реАрди рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ рдХреЛрдИ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реБрдИрдВ!



рдЬрдм рдЦрдВрдб


рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдФрд░ рдлрд┐рд░ рдмрдпрд╛рдиреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдпрд╣ рд╣рдорд╛рд░реА рд╕реВрдЪреА рдореЗрдВ рдЕрдЧрд▓реЗ рдмрдпрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдЬрдм рдмрдпрд╛рдиред



рдФрд░ рдЪрд▓реЛ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:



 if foo is on then for i in [0..10] when i is 1 then break 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдб рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдирд┐рдХрд▓рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдиреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдФрд░ рдЕрд░реНрде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред



рдЖрдЗрдП рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдХреНрд░рдо рдХреЛ 1 рд╕реЗ 10 рддрдХ рдХреИрд╕реЗ рдШрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ n:



 alert i for i in [1..10] when i % 2 is 0 

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж:



 for (i = 1; i <= 10; i++) { if (i % 2 === 0) { alert(i); } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдСрдкрд░реЗрдЯрд░ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИред



рд╢рд┐рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП


рд╕реВрдЪреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдСрдлрд╝ рдлреЙрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗ рд╣реИрдВред рдЕрдм рдЖрдЗрдП рдлреЙрд░- рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЬреЛ рдлреЙрд░-рдЗрди рдХреЗ рд╕рд╛рде - рд╕рд╛рде рдЖрдкрдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рдЖрдЗрдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝реЛрд░ -рдЗрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рддреБрд▓рдирд╛рддреНрдордХ рд╕рд╛рджреГрд╢реНрдп рдмрдирд╛рдПрдВред



 var object = { foo: 0, bar: 1 }; for (var i in object) { alert(key + " : " + object[i]); //0 : foo, 1 : bar } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛: рдСрдмреНрдЬреЗрдХреНрдЯ [i] ред


CoffeeScript рдореЗрдВ , рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕реВрдЪреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 value for key, value of {foo: 1, bar: 2} 

рджреВрд╕рд░реЗ, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд░рд┐рдЪрд┐рдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд╕рдВрдХреЗрддрди рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 for key, value of {foo: 1, bar: 2} if key is 'foo' and value is 1 then break 

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



 var object = { foo: 1, bar: 2 }; for (key in object) { if (key === 'foo' && object[i] === 1) { break; } } 

рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:



 (if value is 1 then alert "#{key} : #{value}") for key, value of document #ELEMENT_NODE : 1, #DOCUMENT_POSITION_DISCONNECTED : 1 

рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╕реНрддреБ рдЧреБрдгреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА () рд╡рд┐рдзрд┐ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ рд╣реИ:



 Object.keys obj {foo: 1, bar: 2} # foo, bar 

рд╕рдВрдкрддреНрддрд┐ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирдХреНрд╢реЗ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:



 object = foo: 1 bar: 2 Object.keys(object).map (key) -> object[key]; # 1, 2 


рдЬрдмрдХрд┐ рдмрдпрд╛рди


рдмрдпрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП / рдХреА / рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреА рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред



рдЬрдм рд╣рдордиреЗ рдлреЙрд░-рдЗрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рджреЗрдЦрд╛, рддреЛ рдореИрдВрдиреЗ n рдХреЗ рддрдереНрдпрд╛рддреНрдордХ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛, рд╕рдордп рд╕рд╣реА рд╣реИ:



 factorial = (n) -> result = 1 while n then result *= n-- result 

рдСрдлрд╣реИрдВрдб рдореИрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдмрд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдлреИрдХреНрдЯрд░рд┐рдпрд▓ рд╕реЙрд▓реНрдпреВрд╢рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:



 factorial = (n) -> !n and 1 or n * factorial n - 1 


рд▓реВрдк рдирд┐рд░реНрджреЗрд╢


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



 loop then break if foo is bar 


рдкреНрд░рд╕рд╛рд░рдг рдкреНрд░рд╕рд╛рд░рдг:



 while (true) { if (foo === bar) { break; } } 


рдирд┐рд░реНрджреЗрд╢ рддрдХ


рдЬрдм рддрдХ рдХрдерди рдПрдХ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИ, рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред


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



 expr = /foo/g; alert "#{array[0]} : #{expr.lastIndex}" until (array = expr.exec('foofoo')) is null 

рдкреНрд░рд╕рд╛рд░рдг рдкреНрд░рд╕рд╛рд░рдг:



 var array, expr; expr = /foo*/g; while ((array = expr.exec('foofoo')) !== null) { alert("" + array[0] + " : " + expr.lastIndex); } //foo : 3, foo : 6 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реВрдк рдХреЛ рддрдм рддрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╢реВрдиреНрдп рди рд╣реЛ рдЬрд╛рдПред



рдХрд░рддреЗ-рдХрд░рддреЗ рдмрдпрд╛рди


рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдбреВ- рдСрдлрд╝ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд░рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд▓реВрдк рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЖрдВрд╢рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:



 loop #... break if foo() 


рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпрд╛рдБ (рдлрд╝рд┐рд▓реНрдЯрд░, forEach, рдореИрдк рдЗрддреНрдпрд╛рджрд┐)


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╕рднреА рд╕рдорд╛рди рддрд░реАрдХреЗ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ JavaSctipt рдореЗрдВ рд╣реИ ред


рдЗрд╕ рдкреВрд░реЗ рд╕рдореВрд╣ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ; рд╣рдо рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдирдХреНрд╢реЗ () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред



рддреАрди рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ:



 [1..3].map (i) -> i * i 

рдкреНрд░рд╕рд╛рд░рдг рдкреНрд░рд╕рд╛рд░рдг:



 [1, 2, 3].map(function(i) { return i * i; }); 

рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:



 ['foo', 'bar'].map (value, i) -> "#{value} : #{i}" #foo : 0, bar : 1 

рджреВрд╕рд░рд╛ рддрд░реНрдХ, рдорд╛рдирдЪрд┐рддреНрд░ рд╡рд┐рдзрд┐ рдХреЙрд▓ рд╕рдВрджрд░реНрдн рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ:



 var object = new function() { return [0].map(function() { return this }); }; // [Window map] 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╡рд┐рдВрдбреЛ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЕрдВрджрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЙрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:



 var object = new function() { return [0].map(function() { return this; }, this); }; // [Object {}] 

CoffeeScript рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ = = рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:



 object = new -> [0].map (i) => @ 

рдкреНрд░рд╕рд╛рд░рдг рдкреНрд░рд╕рд╛рд░рдг:



 var object = new function() { var _this = this; return [0].map(function() { return _this; }, this); }; 

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рд╕реАрдорд╛ рддрдХ рдЗрди рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред



рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ github'e рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ


рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореИрдк рдФрд░ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг github'e рдкрд░ рдореЗрд░реА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднреА рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ



рдирд┐рд░реНрджреЗрд╢ / рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ рдХрд░реЗрдВ


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рдореЗрдВ рдЗрд╕ рдЖрдирдВрдж рд╕реЗ рд╡рдВрдЪрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



рдПрдХ рдЕрдирд╛рдо, рд╕реНрд╡-рдмрд╛рдзреНрдпрдХрд╛рд░реА рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдордирдорд╛рдиреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред



рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:



 array = []; i = 2 while i-- then array[i] = do (i) -> -> i array[0]() #0 array[1]() #1 

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



рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:



 var array = [], i = 2; while (i--) { array[i] = function(i) { return function() { return i; }; }(i); } array[0]() //0 array[1]() //1 


рдиреЗрд╕реНрдЯреЗрдб рдирд┐рд░реНрджреЗрд╢


рдиреЗрд╕реНрдЯреЗрдб рдирд┐рд░реНрджреЗрд╢ рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рд╕рдорд╛рди рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ:

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1 рд╕реЗ 3 рддрдХ рдпреБрдЧреНрдорд┐рдд рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рднрд░реЗрдВ:

 list = [] for i in [0..2] for j in [1..2] list.push i list # [0,0,1,1,2,2] 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ!

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

 list = [] for i in [0..2] then for j in [1..2] then list.push i 

PS: рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕реЗ рд▓рд┐рдЦрдирд╛ рднреА рдЕрдиреБрдордд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЛ рджреВрд╕рд░реЗ рдЪрдХреНрд░ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рддреАрди рдЬреЛрдбрд╝реЗ рддрддреНрд╡реЛрдВ рдХреЛ 0-3 рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

 list = [] for i in [0..2] list.push i for j in [1..1] list.push i list #[0,0,1,1,2,2] 


рдпрд╣ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреВрд╕рд░реЗ рдЪрдХреНрд░ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдкрд╖реНрдЯ рдкрд╣рдЪрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЪрдХреНрд░ рдХреЗ рд╢рд░реАрд░ рдХреЛ рд▓рдШреБ рд╕рдВрдХреЗрддрди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 list = [] for i in [0..2] list.push i list.push i for j in [1..1] list #[0,1,2,3] 


рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рдЖрдк рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рдЙрдкрд╕рд░реНрдЧ рдФрд░ рдЙрдкрд╕рд░реНрдЧ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

jQuery рдЖрджрд┐ред


рдореБрдЭреЗ рдЕрднреА рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реИ, CoffeeScript рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



рдЖрдЗрдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг jQuery рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ - рдкрд╣рд▓реЗ рд╕реЗ рд╣реА ()

ред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА ():

 $ -> @ 

рдкреНрд░рд╕рд╛рд░рдг рдкрд░рд┐рдгрд╛рдо:


 $(function() { return this; }); 

рдореИрдВ рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рд░рд┐рдХреЙрд░реНрдб рд╣реИ рдЬреЛ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рд╣рдВрд╕реА рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ



рд╣рдорд╛рд░реА рд╕реВрдЪреА рдореЗрдВ рдЕрдЧрд▓рд╛ jQuery рд╡рд┐рдзрд┐ .each () рд╣реИ , рдЬреЛ рдорд╛рдирдХ .forEach () рд╡рд┐рдзрд┐ рдХреЗ рд▓рдЧрднрдЧ рдмрд░рд╛рдмрд░ рд╣реИ

$ .each:

 $.each [1..3], (i) -> i 

рдкреНрд░рд╕рд╛рд░рдг рдкрд░рд┐рдгрд╛рдо:



 $.each([1, 2, 3], function(i) { return i; }); 


ECMASctipt 6


рдпрджрд┐ рдЖрдк ECMASctipt 6 рдорд╛рдирдХ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ ECMASctipt 6 рдорд╛рдирдХ рдореЗрдВ рдЬрдирд░реЗрдЯрд░, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рд╕реВрдЪреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИред
рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдЕрдм рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреНрд░рд╛рдлреНрдЯ рдорд╛рдирдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдХреНрдпреЛрдВ рд╣реВрдБ?

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рдИрдПрд╕ 6 рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдЖрдЬ рдХреЗ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдВрдЧрдд рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрджреЗрд╢ рдХреЗ ... рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ:

 [value for key, value of [1,2,3]] 

рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдирд┐рдореНрди рд╡рд┐рдХреГрддрд┐ рдорд┐рд▓рддреА рд╣реИ:

 var key, value; [ (function() { var _ref, _results; _ref = [1, 2, 3]; _results = []; for (key in _ref) { value = _ref[key]; _results.push(value); } return _results; })() ]; //[1, 2, 3] 

рднрд╡рд┐рд╖реНрдп рдХрд╛ рдорд╛рдирдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:

 [for i of [1,2,3]] 

рдорд╣рд╛рди, рд╣реИ рдирд╛?

рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬрдирд░реЗрдЯрд░ рднреА рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ:

 [i * 2 for each (i in [1, 2, 3])]; //2,4,6 

рдЗрд╕ рддрд░рд╣ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рднреА рдмрди рд╕рдХреЗрдЧрд╛:

 [i * 2 for each (i in [1, 2, 3]) if (i % 2 == 0)]; //2 

Iterators рднреА рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рдПрдЧрд╛:

 var object = { a: 1, b: 2 }; var it = Iterator(lang); var pair = it.next(); //[a, 1] pair = it.next(); //[b, 2] 

Iterators рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 var it = Iterator([1,2,3]); [i * 2 for (i in it)]; //1, 4, 6 


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

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


All Articles