рдореБрдЭреЗ рдпрд╣ рдиреЛрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╣реЗрдмреЗ рдкрд░ рд▓реЗрдЦ
"рд╡рд╛рд░, рд▓реЗрдЯ рдпрд╛ рдХреЙрдиреНрд╕реНрдЯреЗрдВрд╕? рдЪрд░ рдФрд░ рдИрдПрд╕ 6 рдХреЗ рджрд╛рдпрд░реЗ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд╕рд╛рде рд╣реА
рдЬрд╝рдХрд╕ рдПрди рдХреА рдкреБрд╕реНрддрдХ
"рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 5 рдХреА рд╕рдордЭ" рдХреЗ рд╕рдВрдЧрдд рднрд╛рдЧред рдореИрдВрдиреЗ рдЬреЛ рдкрдврд╝рд╛ рд╣реИ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐
var рдпрд╛
let рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдЦрдХреЛрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░реЛрдВ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рд╕рд░рд▓реАрдХреГрдд рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдЗрди рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ
рдлреМрд░рди рдлрдВрдХреНрд╢рдиреНрд╕ (рддреБрд░рдВрдд рдЖрдордВрддреНрд░рд┐рдд рдлрдВрдХреНрд╢рди рдПрдХреНрд╕рдкреНрд░реЗрд╢рди, рдЖрдИрдЖрдИрдПрдлрдИ) рдХреЗ рд▓реВрдк рдореЗрдВ
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
let func1 = []; for (var i = 0; i < 3; i++) { func1.push(function(i) { return function() { console.log(i); } }(i)); } func1.forEach(function(func) { func(); });
рдпрд╛ рдЖрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
let func1 = []; for (let i = 0; i < 3; i++) { func1.push(function() { console.log(i); }); } func1.forEach(function(func) { func(); });
рдЬрд╝рдХрд╕ рдПрдиред рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЗрдиреЗ рд╡рд╛рд▓реЗ рджреЛрдиреЛрдВ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг, рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
"рдпрд╣ рд▓реВрдк рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕ рд▓реВрдк рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ var рдФрд░ IIFE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрдХреАрдирди рдХреНрд▓реАрдирд░ рд╣реИ"
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╣ рдЦреБрдж, рдереЛрдбрд╝рд╛ рдЖрдЧреЗ, рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЦрдВрдбрди рдХрд░рддрд╛ рд╣реИред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐
рдЪрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рддреЗ рд╕рдордп рд▓реВрдк рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд╛рдиреАрдп рдЪрд░
i рдмрдирд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рд░рдгреА рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдЕрд▓рдЧ рдЪрд░ рдХреЛ рднреА рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ?
let func1 = []; for (var i = 0; i < 3; i++) { func1.push(function(i) { return function() { console.log(i); } }(i)); ++i; } func1.forEach(function(func) { func(); });
рдпрд╣рд╛рдВ,
++ i рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░
, рд╣рдорд╛рд░рд╛ рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рдЕрдиреБрдорд╛рдирд┐рдд рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрди рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдерд╛ рдЬреЛ рдХреЙрд▓ рдХреЗ рд╕рдордп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдереЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рд▓реВрдк рд╕реНрд╡рдпрдВ рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╛рдж рдХреЗ рдСрдкрд░реЗрд╢рди
++ i рдиреЗ рд╕рд░рдгреА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИред
i рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде
рдлрд╝рдВрдХреНрд╢рди (i) рдореЗрдВ рдмрдВрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрдм
рдЖрдИрдЖрдИрдПрдлрдИ рдХреЗ рдмрд┐рдирд╛
рд▓реЗрдЯ- рд╡рд░реНрдЬрди рд╕реЗ рддреБрд▓рдирд╛ рдХрд░реЗрдВ
let func1 = []; for (let i = 0; i < 3; i++) { func1.push(function() { console.log(i); }); ++i; } func1.forEach(function(func) { func(); });
рдкрд░рд┐рдгрд╛рдо, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдкреНрд░рдХреГрддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддреБрд░рдВрдд рдорд╛рди рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдЪрдХреНрд░ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рдХреНрд▓реЛрдЬрд╝рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдорд╛рдиреЛрдВ рдХреЛ рд▓рд┐рдпрд╛ред
рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕рдХрд╛ рд╕рд╛рд░ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдФрд░ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ, рдмрд┐рдирд╛,
рдЖрдЗрдП рджреЗрдЦреЗрдВ :
let func1 = [], func2 = []; for (var i = 0; i < 3; i++) { func2.push(function() { console.log(++i); }); func1.push(function() { console.log(++i); }); ++i; } func1.forEach(function(func) { func(); }); func2.forEach(function(func) { func(); });
рдЕрдм рддрдХ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдХреЛрдИ рдмрдВрдж рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
i рдХреА рдкрд╣реБрдВрдЪ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╣рд░ рдЬрдЧрд╣ рд╣реИ), рдпрд╛рдиреА, рдЗрд╕реА рддрд░рд╣, рд▓реЗрдХрд┐рди рдПрдХ рд╕реНрдерд╛рдиреАрдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЪрд░
рдореИрдВ рдПрдХ рд╕рдорд╛рди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реЛрдЧреА:
let func1 = [], func2 = []; function test() { for (var i = 0; i < 3; i++) { func2.push(function() { console.log(++i); }); func1.push(function() { console.log(++i); }); ++i; } } test(); func1.forEach(function(func) { func(); }); func2.forEach(function(func) { func(); });
рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрддрд╛ рд╣реИ:
1. рдЪрдХреНрд░
i == 2 рдХреЗ рдЕрдВрддрд┐рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдлрд┐рд░
1 (++ i) рджреНрд╡рд╛рд░рд╛ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ
1 рдФрд░
i + ++ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреВрд░реЗ рдЪрдХреНрд░
i == 4 рдХреЗ рдЕрдВрдд рдореЗрдВред
2.
func1 рдФрд░
func2 рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рдХрд╛рд░реНрдпреЛрдВ
рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╕рдорд╛рди рдЪрд░
рдореИрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝рд╛ рд╣реБрдЖ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдмрдВрдж рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдЬрдм рд╣рдо рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реНрдерд╛рдиреАрдп рдХреЗ рд╕рд╛рдеред
IIFE рдЬреЛрдбрд╝реЗрдВред
рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк:
let func1 = [], func2 = []; for (var i = 0; i < 3; i++) { func2.push(function(i) { return function() { console.log(++i); } }(i)); func1.push(function(i) { return function() { console.log(++i); } }(i)); ++i; } func1.forEach(function(func) { func(); }); func2.forEach(function(func) { func(); });
рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк:
let func1 = [], func2 = []; for (var i = 0; i < 3; i++) { func2.push(function(i) { return function() { console.log(i); } }(++i)); func1.push(function(i) { return function() { console.log(i); } }(++i)); ++i; } func1.forEach(function(func) { func(); }); func2.forEach(function(func) { func(); });
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ
IIFE рдЬреЛрдбрд╝рддреЗ
рд╕рдордп , рд╣рдордиреЗ рдмрд╕
i рдХреЗ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рдиреЛрдВ рдХреЛ
рдлрд╝рдВрдХреНрд╢рди (i) (
0 рдФрд░
2 , рдХреНрд░рдорд╢рдГ рдЪрдХреНрд░ рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдкрд╛рд╕ рдХреЗ рджреМрд░рд╛рди) рдХрд╣рд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ 1 рд╕реЗ рдмрдврд╝рд╛ рджрд┐рдпрд╛, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдЖрдо рдЪрд░ рдХреЗ рд▓рд┐рдП рдмрдВрдж рд╣реИред рд▓реВрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд▓реВрдк рдХреЗ рдкрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдореВрд▓реНрдп
рдореИрдВ рддреБрд░рдВрдд рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реВрдк рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рднреА рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рдореВрд▓реНрдп рдПрдХ рд╕рд╛рде рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдкрд╛рд╕
i == 4 рдХреЗ рдЕрдВрдд рдореЗрдВ, рдФрд░ рд▓реВрдк рдЖрдЧреЗ рдирд╣реАрдВ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди, рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЪрд░ рдХреЗ рдмрдВрдж рд╣реЛрдиреЗ, рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
let func1 = [], func2 = []; for (var i = 0; i < 3; i++) { func2.push(function(i) { return function() { console.log(++i); } }(i)); func1.push(function(i) { return function() { console.log(++i); } }(i)); ++i; } func1.forEach(function(func) { func(); }); func2.forEach(function(func) { func(); }); func1.forEach(function(func) { func(); }); func2.forEach(function(func) { func(); });
рдзреНрдпрд╛рди рджреЗрдВ: рднрд▓реЗ рд╣реА рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЪрдХреНрд░ рдХреЛ рдлреНрд░реЗрдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдо рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛редрдЕрдм рдЖрдЗрдП рдХреЗ рдмрд┐рдирд╛, рдХреНрд░рдорд╢рдГ
рдЖрдЗрдП рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
let func1 = [], func2 = []; for (let i = 0; i < 3; i++) { func2.push(function() { console.log(++i); }); func1.push(function() { console.log(++i); }); ++i; } func1.forEach(function(func) { func(); }); func2.forEach(function(func) { func(); });
рдФрд░ рдпрд╣рд╛рдБ, рд╣рдордиреЗ рдлрд┐рд░ рд╕реЗ рд▓реВрдк рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдПрдХ рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛, рдФрд░ рдПрдХ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рджреЛ, рдФрд░ рдЕрд▓рдЧ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХреЙрдорди, рдЬреЛ рдХрд┐ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ, рдЪрдХреНрд░ рдореЗрдВ
рд▓реЗрдЯ рдХреЗ
рдЬрд╛рдиреЗ -рдорд╛рдиреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ
рджреЗрдЦрддреЗ рд╣реБрдПред
рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдмрдВрдж рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореВрд▓реНрдп
i == 1 рд╣реИ , рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ
i == 3 ред рдпреЗ рд╡реЗ рдорд╛рди рд╣реИрдВ рдЬреЛ
i ++ рдФрд░ рд▓реВрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдЪрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реВрдк рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рднреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рдж, рдФрд░, рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдмрдВрдж рд╣реИрдВред
рдлрд┐рд░
func1 рдПрд░реЗ рдореЗрдВ рд╕реНрдерд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ
рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рджреЛрдиреЛрдВ рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд╣рд▓реЗ
i == 2 , рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ
i == 4 ред
рдЖрдЧреЗ
func2 рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдФрд░ рдХреНрд░рдорд╢рдГ
i == 3 рдФрд░
5 рдорд┐рд▓рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░
func2 рдФрд░
func1 рдХреЛ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░рдЦрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рд╕реНрдерд╛рди рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рдереА, рдФрд░ рд▓реВрдк рдЪрд░ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рддрдереНрдп рдкрд░ рдкрд╛рдардХ рдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдПрдХ рддреБрдЪреНрдЫ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреНрд▓реЛрдЬрд╝рд░ рдХреА рд╕рдордЭ рдХреЛ рдордЬрдмреВрдд рдХрд░рдирд╛ рдФрд░
рд▓реЗрдЯ рд╣реЛрдиреЗ рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИ:
let func1 = []; { let i = 0; func1.push(function() { console.log(i); }); ++i; } func1.forEach(function(func) { func(); }); console.log(i);
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрд▓ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ
1. рдлрдВрд╕реЗ рд╣реБрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддреБрд░рдВрдд рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рд▓реВрдк рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп
рд▓реЗрдЯ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ, рдФрд░, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред
2. рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЬрдм рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП
рд▓реЗрдЯ рдШреЛрд╖рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЗ рдирд┐рдкрдЯрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рдореИрдВ рд╢реБрд░реВ рдореЗрдВ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдпрд╣ рд╕рдВрджреЗрд╣ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪрд░ рдмрдирд╛рдиреЗ, рдХреНрд░рдорд╢рдГ, рд▓реВрдк рд╕рдВрдХрд▓рдХ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдХреЗрд╡рд▓ рдЪрд░ рдШреЛрд╖рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рд░рдгреА рдХреЛ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд▓рдЧрднрдЧ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рдореЗрдВ рдПрдХ рд▓рд╛рдн рджрд┐рдЦрд╛рддрд╛ рд╣реИред 100,000 рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рд░:
рд╡рд░ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк: const start = Date.now(); var arr = [], func1 = [], func2 = []; for (var i = 0; i < 100000; i++) { arr.push(Math.random()); } for (var i = 0; i < 99999; i++) { var min, minind = i; for (var j = i + 1; j < 100000; j++) { if (arr[minind] > arr[j]) minind = j; } min = arr[minind]; arr[minind] = arr[i]; arr[i] = min; func1.push(function(i) { return function() { return i; } }(arr[i])); } func1.push(function(i) { return function() { return i; } }(arr[99999])); for (var i = 0; i < 100000; i++) { func2.push(func1[i]()); } const end = Date.now(); console.log((end - start)/1000);
рдФрд░ рдЪрд▓реЛ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк: const start = Date.now(); let arr = [], func1 = [], func2 = []; for (let i = 0; i < 100000; i++) { arr.push(Math.random()); } for (let i = 0; i < 99999; i++) { let min, minind = i; for (let j = i + 1; j < 100000; j++) { if (arr[minind] > arr[j]) minind = j; } min = arr[minind]; arr[minind] = arr[i]; arr[i] = min; func1.push(function() { return arr[i]; }); } func1.push(function() { return arr[99999]; }); for (let i = 0; i < 100000; i++) { func2.push(func1[i]()); } const end = Date.now(); console.log((end - start)/1000);
рдЙрд╕реА рд╕рдордп, рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ / рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдерд╛:
IIFE рдХреЗ рд╕рд╛рде func1.push(function(i) { return function() { return i; } }(arr[i]));
рдпрд╛
IIFE рдХреЗ рдмрд┐рдирд╛ func1.push(function() { return arr[i]; });
рдФрд░
рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ for (var i = 0; i < 100000; i++) { func2.push(func1[i]()); }
рдиреЛрдЯ: рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЧрддрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирдИ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рджреЗрдиреЗ рд▓рд╛рдпрдХ рдереЗредрдЗрд╕ рд╕рдм рд╕реЗ рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рдХреЗ рдорд╛рдирдХреЛрдВ рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ,
var рдХреЗ рдмрдЬрд╛рдп
рд▓реЗрдЯ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдЪрд┐рдд рд╣реИ, рд╡рд┐рд╢реЗрд╖рдХрд░ рд▓реВрдк рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВред рд▓реЗрдХрд┐рди, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдпрд╣ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рддреБрд░рдВрдд рдмреБрд▓рд╛рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред