рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рдХрд╣рд╛рдиреА: рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреНрдЮрд╛рдкрди

рдЫрд╡рд┐


рдпрд╣ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ рд╡рд╛рд░реНрд╖рд┐рдХ рд╣реЛрд▓реНрдЬреЗрд╕ рд╕рдореНрдореЗрд▓рди рдХреА рдкреВрд░реНрд╡ рд╕рдВрдзреНрдпрд╛ рдкрд░ рд╣реБрдЖ рдерд╛ред рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдПрдХ рдкреНрд░рд╛рдпреЛрдЬрдХ рд╣реИ: рддрджрдиреБрд╕рд╛рд░, рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдорди рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд░реБрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рд╕реНрдЯреИрдВрдб рднреА рд╣реИред рдЬрдм рдореБрдЦреНрдп рдкрд╛рдареНрдпрдХреНрд░рдо рддреИрдпрд╛рд░ рдерд╛ рдФрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЧрдИ рдФрд░ рд╡рдХреАрд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЛ рд░рд╛рдд рдореЗрдВ рдХреБрдЫ рдФрд░ рдмреМрджреНрдзрд┐рдХ рднреЛрдЬрди рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:


рдПрдХ рд╕рдВрд╕реНрдорд░рдг рд▓рд┐рдЦреЗрдВ - рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рджреЛрд╣рд░рд╛рдП рдЧрдП рдЧрдгрдирд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдкрдЯреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 50 рдЕрдХреНрд╖рд░ рд╣реИрдВред

рднрд╛рд╖рд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ ред рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди 50-рдЪрд░рд┐рддреНрд░ рдХреА рд╕реАрдорд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪреБрдиреМрддреА рдореЗрдВ рдмрджрд▓ рдЧрдИред


рд╕рдореНрдореЗрд▓рди рдХреЗ рдкрд╣рд▓реЗ рджрд┐рди рдХреЗ рдмреНрд░реЗрдХ рдореЗрдВ, рд╣рдордиреЗ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА, рдзреАрд░реЗ-рдзреАрд░реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдо рдХрд┐рдпрд╛ред рд╕рдореНрдореЗрд▓рди рдХреЗ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рднреА рдкреНрд░рдЪрд╛рд░реЛрдВ рдХрд╛ рддрд╛рдЬ рдкрд╣рдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рджреВрд╕рд░реЗ рджрд┐рди рд╣рдордиреЗ рдХрд╛рд░реНрдп рдХреЛ рджреЗрдЦрд╛ (рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рджреЗрдЦреЗрдВ) рдФрд░ рдЬреЛ рдЪрд╛рд╣рддреЗ рдереЗ, рдЙрдиреНрд╣реЗрдВ рдлреЙрд░реНрдо рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рд▓рдЧрднрдЧ 40 рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдП рдФрд░ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ js-Developers рдХреЗ рдЕрд╕рд╛рдзрд╛рд░рдг рд╕рдореБрджрд╛рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛ рдЧрдП, рд▓реЗрдХрд┐рди рджрдорд┐рддреНрд░реА рдХрдЯрд╛рд╡реЗ рдХрд╛ 53 рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб (SEMrush) рдмрдирд╛ рд░рд╣рд╛ред рдЪрд▓реЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ!


рдЖрджрддрди рдЕрдорд▓


function memoize(f) { let cache = {}; return function ret() { let key = JSON.stringify(arguments); if (!cache.hasOwnProperty(key)) { cache[key] = f.apply(this, arguments); } return cache[key]; } } 

рдкрд░рд┐рдгрд╛рдо: ~ 190 рд╡рд░реНрдг


  • рдЬреНрдЮрд╛рдкрди - рд╣рдорд╛рд░рд╛ рд╕рдВрд╕реНрдорд░рдг
  • рдЪ - рд╕рдЬрд╛рдпрд╛, рд▓рд┐рдкрдЯреЗ рд╕рдорд╛рд░реЛрд╣
  • рдкрд░рд┐рдгрд╛рдореА рдлрд╝рдВрдХреНрд╢рди

рдЬрд╡рд╛рдм рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП - рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЖрдХрд╛рд░ - рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


 memoize.toString().replace(/\s+/g, ' ').length 

рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЙрд╕рдХреЗ рд╢рд░реАрд░ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдЕрдирд╛рдо рд╣реИ, рддреЛ рдШреЛрд╖рдгрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред


рджреБрд░реБрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг:


 const log = memoize(console.log); const inc = memoize(o => ox + 1); 

рд╕рдВрдЦреНрдпрд╛рдлрдВрдХреНрд╢рди рдХреЙрд▓рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
1редlog(false)> рдЭреВрдард╛
2редlog('2', {x:1})> '2', {x: 1}
3редlog(false)рдХреБрдЫ рднреА рдирд╣реАрдВ, рдЪреВрдВрдХрд┐ рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред
4редlog('2', {x:1})рдХреБрдЫ рднреА рдирд╣реАрдВ, рдЪреВрдВрдХрд┐ рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред
5редinc({x:1})2
6редinc({x:2})3

рдЕрдЧрд▓рд╛, рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдиреЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рдо рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкреАрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ , рдФрд░ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдирдП рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдирд╛рдо рдХреЛ рдХрдо рдХрд░ рджреЗрдВрдЧреЗ:


 const memoize = f => { let c = {}; return function() { let k = JSON.stringify(arguments); if (!c.hasOwnProperty(k)) { c[k] = f.apply(this, arguments); } return c[k]; } } 

рдкрд░рд┐рдгрд╛рдо: 154 , рдкрд░реАрдХреНрд╖рдг рдЙрддреНрддреАрд░реНрдг


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


 const memoize = f => { let c = {}; return (...a) => { let k = JSON.stringify(a); if (!c.hasOwnProperty(k)) { c[k] = f(...a); } return c[k]; } } 

рдкрд░рд┐рдгрд╛рдо: 127 , рдкрд░реАрдХреНрд╖рдг рдкрд╛рд░рд┐рдд


рдЕрдм рд╣рдо рдкрд░рд┐рдгрд╛рдореА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреИрд╢ рдореЗрдВ рдЪрд╛рдмреА рдвреВрдВрдврдирд╛ рдФрд░ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдмреЛрдЭрд┐рд▓ рд╣реИред рдЖрдЗрдП рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдХреИрд╕реЗ:


 const memoize = f => { let c = {}; return (...a) => { let k = JSON.stringify(a); return c[k] || (c[k] = f(...a)); } } 

рдкрд░рд┐рдгрд╛рдо: 101 , рдкрд░реАрдХреНрд╖рдг 3 рдФрд░ 4 рдЧрд┐рд░ рдЧрдП


рдпрд╣рд╛рдБ рд╣рдо hasOwnProperty рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░рд┐рддреНрдпрд╛рдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдмрд░реНрджрд╛рд╢реНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ JSON.stringify рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрд░реНрдХреЛрдВ рдХреА рд╕рд░рдгреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ "[...]" рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕реА рд╕рдВрдкрддреНрддрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреИрд╢ ( рдСрдмреНрдЬреЗрдХреНрдЯ ) рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА ред


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


рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рдкрд░реАрдХреНрд╖рдг 3 рдФрд░ 4 рдЧрд┐рд░ рдЧрдПред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рд╕рдЬрд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдПрдХ рдорд╛рди рдирд╣реАрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ: рдкрд░рд┐рдгрд╛рдо рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдЧрд╛ред рд╣рдо рдЗрд╕реЗ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдбрд┐рд╕реНрдЬреЗрдирд░реЗрдЯрд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдВрдб рдореЗрдВ рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдЭреВрдареЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рджреВрд╕рд░реЗ рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рднрд╛рд╡ рдШрдЯреЗ рд╣реБрдП рд╕рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдШрдЯрд┐рдд рд╣реЛрдЧрд╛: 0, "", рдЕрд╢рдХреНрдд, NaN , рдЖрджрд┐ред


OR рдпрд╛ рдпрджрд┐ рдХрдерди рдХреЗ рдмрдЬрд╛рдп , рд╣рдо рдПрдХ рд╕рд╢рд░реНрдд рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 const memoize = f => { let c = {}; return (...a) => { let k = JSON.stringify(a); return c.hasOwnProperty(k) ?c[k] :c[k] = f(...a); } } 

рдкрд░рд┐рдгрд╛рдо: 118 , рдкрд░реАрдХреНрд╖рдг рдЙрддреНрддреАрд░реНрдг


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


 const memoize = f => { let c = new Map; return (...a) => { let k = JSON.stringify(a); return (c.has(k) ?c :c.set(k, f(...a))).get(k); } } 

рдкрд░рд┐рдгрд╛рдо: 121 , рдкрд░реАрдХреНрд╖рдг рдЙрддреНрддреАрд░реНрдг


рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛред рд▓реЗрдХрд┐рди рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рддреБрд░рдВрдд рддреНрдпрд╛рдЧ рджреЗрдВ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдХреА-рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ, рдХреНрдпрд╛ рд╣рдореЗрдВ JSON.stringify рдмрд┐рд▓реНрдХреБрд▓ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?


 const memoize = f => { let c = new Map; return (...a) => (c.has(a) ?c :c.set(a, f(...a))).get(a); } 

рдкрд░рд┐рдгрд╛рдо: 83 , рдкрд░реАрдХреНрд╖рдг 3 рдФрд░ 4 рдЧрд┐рд░ рдЧрдП


рдпрд╣ рдмрд╣реБрдд рд╣реА рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд░реАрдХреНрд╖рдг 3 рдФрд░ 4 рдлрд┐рд░ рд╕реЗ рдЧрд┐рд░рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдПред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдореИрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ SameValueZone рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИред рдпрджрд┐ рдЖрдк NaN, -0 рдФрд░ 0 рдХреЗ рд╕рд╛рде рд╡рд┐рд╡рд░рдг рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдЦреНрдд рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ ( === ) рдХреЗ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓рд┐рдкрдЯреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ (рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ) рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рднреАред рддреБрд▓рдирд╛ рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП Map.prototyp.has рд╡рд┐рдзрд┐ рдХрднреА рднреА рдХреБрдЫ рднреА рдирд╣реАрдВ рдЦреЛрдЬ рдкрд╛рдПрдЧреА ред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдк рдХреЗ рдЙрдкрдпреЛрдЧ рдиреЗ рд╣рдореЗрдВ hasOwProperty рдпрд╛ JSON.stringify рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ ред


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


 const memoize = f => { let c = {}; return (...a) => { let k = JSON.stringify(a); return k in c ?c[k] :c[k] = f(...a); } } 

рдкрд░рд┐рдгрд╛рдо: 105 , рдкрд░реАрдХреНрд╖рдг рдЙрддреНрддреАрд░реНрдг


рдЬреНрдЮрд╛рдкрдирдХрд░реНрддрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдлрд╝рдВрдХреНрд╢рди рджреЛрдиреЛрдВ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд╡рд╛рдкрд╕реА рдХрдерди рдореЗрдВ рддрд░реНрдХ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рджреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВред рдХреНрдпрд╛ рддреАрд░ рдХреЗ рд╢рд░реАрд░ рдХреЛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдмреЗрд╢рдХ, IIFE ( рддреБрд░рдВрдд рдЗрдирд╡реЙрдЗрд╕ рдлрдВрдХреНрд╢рди рдПрдХреНрд╕рдкреНрд░реЗрд╢рди ) рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░:


 const memoize = f => (c => (...a) => (k => k in c ?c[k] : c[k] = f(...a))(JSON.stringify(a)) )({}); 

рдкрд░рд┐рдгрд╛рдо: 82 , рдкрд░реАрдХреНрд╖рдг рдЙрддреНрддреАрд░реНрдг


рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ:


 f=>(c=>(...a)=>(k=>k in c?c[k]:c[k]=f(...a))(JSON.stringify(a)))({}); 

рдкрд░рд┐рдгрд╛рдо: 68 , рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реБрдП


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЕрдбрд╝рдЪрди рдЕрдм рд▓рдВрдмреА JSON.stringify рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреБрди: JSON рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рддреА рд╣реИ , рдЬрд┐рд╕реЗ рд╣рдо рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рдХреНрд░рдордмрджреНрдзрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреЛрдИ рджреЗрд╢реА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рд╣реИрд╢рдХреЛрдб рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдкреЙрд▓реАрдлрд╛рдЗрд▓ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╕реЗ рдкрд░реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реИред


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


 f=>(c=>(...a)=>a in c?c[a]:c[a]=f(...a))({}); 

рдкрд░рд┐рдгрд╛рдо: 44 , рдкрд░реАрдХреНрд╖рдг 6 рдЧрд┐рд░ рдЧрдпрд╛


рдЯреЗрд╕реНрдЯ 6 рдмрд╕ рдЧрд┐рд░рдирд╛ рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдЯреЗрд╕реНрдЯ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рд╣рд╛рдВ, рд╣рдордиреЗ рддрд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдХрд┐ рдХреЛрдИ рднреА рддрд░реНрдХ рдПрдХ рдЬрдЯрд┐рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реБрдП рд╣рдо рд╕рднреА рдХреА рдкрд╕рдВрджреАрджрд╛ [рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ] рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рддрд░реНрдХреЛрдВ {x: 1} рдФрд░ {x: 2} рд╣реИрд╢ рдореЗрдВ рдПрдХ рд╣реА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред


рдмреЗрд╕ 64 рдореЗрдВ рдХрдиреНрд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдмреЛрдЯреЛ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рджрд╛рд╡реЗрджрд╛рд░ рдерд╛ред рд▓реЗрдХрд┐рди рд╡рд╣ рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВред рд╣рдордиреЗ URI рдмрдирд╛рдиреЗ рдФрд░ рдПрдХ ArrayBuffer рдмрдирд╛рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рд╕реЛрдЪрд╛, рд╣реИрд╢ рдпрд╛ рдХреНрд░рдордмрджреНрдз рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╡реЗ рдпрдерд╛рд╡рдд рд░рд╣реЗред


рд╡реИрд╕реЗ, JSON.stringify рдХреА рдЕрдкрдиреА рдЦрд╝рд╛рд╕рд┐рдпрддреЗрдВ рд╣реИрдВ : рдЗрдиреНрдлрд┐рдирд┐рдЯреА, NaN, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рдкреНрд░рддреАрдХ рдХреЛ рд╢реВрдиреНрдп рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд╣реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЙрд▓ toJSON рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдореИрдк рдФрд░ рд╕реЗрдЯ рдХреЛ рдХреЗрд╡рд▓ рдкреНрд░рдЧрдгрд┐рдд рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдВрддрд┐рдо рдкреНрд░рд╛рд░реВрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: JSONред


рдЖрдЧреЗ рдХреНрдпрд╛?


рд╡рд┐рд╖рд╛рдХреНрдд рд╕рдВрд╢реЛрдзрди


рд╣рдо рд╕рднреА рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдореЗрдВ, рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЪреБрдЯрдХреА рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреИрд╢ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:


 (f,c={})=>(...a)=>(k=>k in c?c[k]:c[k]=f(...a))(JSON.stringify(a)); 

рдкрд░рд┐рдгрд╛рдо: 66 , рдкрд░реАрдХреНрд╖рдг рдЙрддреНрддреАрд░реНрдг


рдпрд╣рд╛рдВ рд╣рдо рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рд╣рдо рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЕрдкрдирд╛ рдХреИрд╢ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛? рд▓реЗрдХрд┐рди рд╣рдордиреЗ 2 рдЕрдХреНрд╖рд░ рдХрдо рдХрд░ рджрд┐рдПред


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


 f=>(...a)=>(k=>k in f?f[k]:f[k]=f(...a))(JSON.stringify(a)); 

рдкрд░рд┐рдгрд╛рдо: 59 , рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реБрдП


рдпрд╣рд╛рдБ JSON.stringify "[...]" рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдХрд░ рдСрдмреНрдЬреЗрдХреНрдЯ (рдлрд╝рдВрдХреНрд╢рди) рдХреЗ рдЕрдиреНрдп рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред


рдЗрд╕ рдХреНрд╖рдг рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдЧреВ IIFE рдкреИрдЯрд░реНрди рдЕрдм рдЦреБрдж рдХреЛ рд╕рд╣реА рдирд╣реАрдВ рдард╣рд░рд╛ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рдкрд╕реА рдХреЗ рдмрдпрд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд░рдЦрдиреЗ рдХреА рддрддреНрдХрд╛рд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


 f=>(...a)=>(k=JSON.stringify(a),k in f?f[k]:f[k]=f(...a)); 

рдкрд░рд┐рдгрд╛рдо: 57 , рдкрд░реАрдХреНрд╖рд╛рдПрдВ рдЙрддреНрддреАрд░реНрдг


рдЪреВрдБрдХрд┐ рд╣рдо рдРрд░реЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмреНрд▓реЙрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ ( var рдпрд╛ let ) рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рд╣рдо рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн - рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдпрд╣рд╛рдБ рд╕рдВрдШрд░реНрд╖ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЛрдиреЗ рдХреА рдХреБрдЫ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред


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


 f=>(...a)=>(k=JSON.stringify(a))in f?f[k]:f[k]=f(...a); 

рдкрд░рд┐рдгрд╛рдо: 54 , рдкрд░реАрдХреНрд╖рдг рдкрд╛рд░рд┐рдд


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


рдФрд░ рдЕрдВрдд рдореЗрдВ:


 f=>(...a)=>f[k=JSON.stringify(a)]=k in f?f[k]:f(...a); 

рдкрд░рд┐рдгрд╛рдо: 53 , рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реБрдП


рдореВрд▓реНрдп рдкрд░ рдкрд╣реБрдВрдЪрддреЗ рд╕рдордп рдХреБрдВрдЬреА рдХреА рдЧрдгрдирд╛ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВред рдФрд░ рдлрд┐рд░ - рдПрдХ рд╣реА рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдФрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯред рдХреБрд▓: 53 рд╡рд░реНрдг!


рдХреНрдпрд╛ рд╢реЗрд╖ 3 рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ?


рд╕рдордЭ


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


  • рдПрд░реЛ рдлрдВрдХреНрд╢рди рдПрдХреНрд╕рдкреНрд░реЗрд╢рди
  • рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╕реНрдХреВрдкрд┐рдВрдЧ рдФрд░ IIFE
  • рдРрд░реЗ-рдЬреИрд╕реЗ рддрд░реНрдХ рд╡рд╕реНрддреБ
  • рдлреИрд▓рд╛ рд╣реБрдЖ, рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдпрд╛ рдСрдкрд░реЗрдЯрд░
  • рд╕рдЦреНрдд рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░
  • JSON.stringify рдФрд░String
  • рдСрдкрд░реЗрдЯрд░ рдФрд░ hasOwnProperty рдореЗрдВ
  • рдЧреНрд░реБрдкрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░ рдФрд░ рдмреНрд▓реЙрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ
  • рдирдХреНрд╢рд╛ рд╡рд╕реНрддреБ
  • рдФрд░ рдХреБрдЫ рдФрд░

рдРрд╕реА рдХрд╣рд╛рдирд┐рдпрд╛рдВ рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдЕрдзреНрдпрдпрди рдореЗрдВ рдЦреБрдж рдХреЛ рд╡рд┐рд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИрдВ, рдЗрд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ (рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд)ред рдФрд░ рд╣рд╛рдВ, рд╕рд┐рд░реНрдл рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП!


рдЖрд╡реЗрджрди


рдЫрд╡рд┐


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

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


All Articles