рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реЙрд░реНрдЯрдХрдЯ

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

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


рдПрдХ рдмрдВрдж рдХреНрдпрд╛ рд╣реИ?


рдХреНрд▓реЛрдЬрд░ рдПрдХ рдРрд╕рд╛ рдлрдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдлрдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЧрдард┐рдд рд╕реНрдХреЛрдк рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж рднреА рдпрд╣ рдПрдХреНрд╕рдЯрд░реНрдирд▓ рдлрдВрдХреНрд╢рди рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рддрд░реНрдХред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо "рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдкрд░реНрдпрд╛рд╡рд░рдг" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред

рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреНрдпрд╛ рд╣реИ?


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

let a = 'global';  function outer() {    let b = 'outer';    function inner() {      let c = 'inner'      console.log(c);   // 'inner'      console.log(b);   // 'outer'      console.log(a);   // 'global'    }    console.log(a);     // 'global'    console.log(b);     // 'outer'    inner();  } outer(); console.log(a);         // 'global' 

рдпрд╣рд╛рдВ, inner() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ outer() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред outer() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

 Global { outer {   inner } } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ inner() рдлрд╝рдВрдХреНрд╢рди outer() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдШрд┐рд░рд╛ рд╣реБрдЖ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рд╕реЗ рдШрд┐рд░рд╛ рд╣реБрдЖ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ inner() рдлрд╝рдВрдХреНрд╢рди outer() рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред

рдХреНрд▓реЛрдЬрд░ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг


рдЖрдВрддрд░рд┐рдХ рд╕рд░реНрдХрд┐рдЯрд░реА рдХреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдгред

1 рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ рез


 function person() { let name = 'Peter'; return function displayName() {   console.log(name); }; } let peter = person(); peter(); // 'Peter' 

рдпрд╣рд╛рдВ рд╣рдо person() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди displayName() , рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЪрд░ peter рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЬрдм, рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо peter() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ peter() рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ displayName() рдлрд╝рдВрдХреНрд╢рди) рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, Peter рдирд╛рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдЙрд╕реА рд╕рдордп, displayName() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд╛рдо рдХрд╛ рдПрдХ рдЪрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рдХреЛ рдмрд╛рд╣рд░реА person() , рдЙрд╕рдХреЗ рдмрд╛рдж рднреА рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдп рдХреИрд╕реЗ рд╣реБрдЖред рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ displayName() рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХреНрд▓реЛрдЬрд░ рд╣реИред

2 рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ 2


 function getCounter() { let counter = 0; return function() {   return counter++; } } let count = getCounter(); console.log(count());  // 0 console.log(count());  // 1 console.log(count());  // 2 

рдпрд╣рд╛рдВ, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣, рд╣рдо рдЪрд░ count рдореЗрдВ getCounter() рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗ рдЕрдирд╛рдо рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ count() рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдХреНрд▓реЛрдЬрд░ рд╣реИ, рдпрд╣ getCount() рдлрд╝рдВрдХреНрд╢рди рдХреЗ counter рд╡реЗрд░рд┐рдПрдмрд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ getCounter() рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рд░ рдмрд╛рд░ count() рдлрд╝рдВрдХреНрд╢рди рдХреЛ counter рдЪрд░ рдХрд╛ рдорд╛рди 0 рдкрд░ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ 0 рдкрд░ рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдмрд╛рд░ count() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕реНрдХреЛрдк рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди getCounter() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИред рдЪреВрдВрдХрд┐ counter рд╡реЗрд░рд┐рдПрдмрд▓ getCounter() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди getCounter() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмреАрдЪ рдЗрд╕рдХрд╛ рдорд╛рди 0 рдкрд░ рд░реАрд╕реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ?


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

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

тЦН рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн


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

рдХрд┐рд╕реА рд╕рдордп рдореЗрдВ, рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ)ред рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рддрдерд╛рдХрдерд┐рдд рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреЙрд▓ рд╕реНрдЯреИрдХ рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ LIFO рд╕рд┐рджреНрдзрд╛рдВрдд (рд▓рд╛рд╕реНрдЯ рдЗрди, рдлрд░реНрд╕реНрдЯ рдЖрдЙрдЯ - рд▓рд╛рд╕реНрдЯ рдЗрди, рдлрд░реНрд╕реНрдЯ рдЖрдЙрдЯ) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИред рдирдП рддрддреНрд╡реЛрдВ рдХреЛ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рддрддреНрд╡реЛрдВ рдХреЛ рдЗрд╕рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдВрджрд░реНрдн рдФрд░ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреНрдпрд╛ рд╣реИрдВ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдЙрджрд╛рд╣рд░рдг

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

рдЗрд╕ рдХреЛрдб рдХрд╛ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


рдХреЙрд▓ рд╕реНрдЯреИрдХ

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

тЦНрд▓рдХреНрд╖реНрдо рдкрд░реНрдпрд╛рд╡рд░рдг


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

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

рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рджреЛ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ:

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

рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 lexicalEnvironment = { environmentRecord: {   <identifier> : <value>,   <identifier> : <value> } outer: < Reference to the parent lexical environment> } 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 let a = 'Hello World!'; function first() { let b = 25;  console.log('Inside first function'); } first(); console.log('Inside global execution context'); 

рдЬрдм рдЬреЗрдПрд╕ рдЗрдВрдЬрди рд╡реИрд╢реНрд╡рд┐рдХ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рднреА рдмрдирд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡реИрд╢реНрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 globalLexicalEnvironment = { environmentRecord: {     a : 'Hello World!',     first : < reference to function object > } outer: null } 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд╛рд╣рд░реА рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд╛рддрд╛рд╡рд░рдг ( outer ) рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ null рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рдореЗрдВ рдмрд╛рд╣рд░реА рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдирд╣реАрдВ рд╣реИред

рдЬрдм рдЗрдВрдЬрди first() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рднреА рдмрдирд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 functionLexicalEnvironment = { environmentRecord: {     b : 25, } outer: <globalLexicalEnvironment> } 

рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░реА рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рд▓рд┐рдВрдХ <globalLexicalEnvironment> рд╕реЗрдЯ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИред

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

рдХреНрд▓реЛрдЬрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг


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

1 рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ рез


рдЗрд╕ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 function person() { let name = 'Peter'; return function displayName() {   console.log(name); }; } let peter = person(); peter(); // 'Peter' 

рдЬрдм person() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ JS рдЗрдВрдЬрди рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдФрд░ рдПрдХ рдирдпрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛, рдлрд╝рдВрдХреНрд╢рди displayName() рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рдЪрд░ peter рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрд╕рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 personLexicalEnvironment = { environmentRecord: {   name : 'Peter',   displayName: < displayName function reference> } outer: <globalLexicalEnvironment> } 

рдЬрдм person() рдлрд╝рдВрдХреНрд╢рди рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рд╕реНрдЯреИрдХ рд╕реЗ рдкреЙрдк рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдореГрддрд┐ рдореЗрдВ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рд╣реИ displayName() ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрд╕ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рдЙрдкрд▓рдмреНрдз рд░рд╣рддреЗ рд╣реИрдВред

рдЬрдм peter() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдкреНрд░рджрд░реНрд╢рдирдирд╛рдо displayName() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ), рдЬреЗрдПрд╕ рдЗрдВрдЬрди рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдФрд░ рдПрдХ рдирдпрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 displayNameLexicalEnvironment = { environmentRecord: {   } outer: <personLexicalEnvironment> } 

displayName() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдИ рдЪрд░ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рд░рд┐рдХреЙрд░реНрдб рдЦрд╛рд▓реА рд╣реЛрдЧрд╛ред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, рдЬреЗрдПрд╕ рдЗрдВрдЬрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ name рдЪрд░ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред

рдЪреВрдБрдХрд┐ displayName() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЦреЛрдЬ рдХреЛ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЦреЛрдЬ рдмрд╛рд╣рд░реА рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдЕрд░реНрдерд╛рддреН person() рдХреЗ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд╛рддрд╛рд╡рд░рдг person() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬрд╛рд░реА рд░рд╣реЗрдЧреА, рдЬреЛ рдЕрднреА рднреА рд╕реНрдореГрддрд┐ рдореЗрдВ рд╣реИред рд╡рд╣рд╛рдВ, рдЗрдВрдЬрди рд╡рд╛рдВрдЫрд┐рдд рдЪрд░ рдкрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

2 рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ 2


 function getCounter() { let counter = 0; return function() {   return counter++; } } let count = getCounter(); console.log(count());  // 0 console.log(count());  // 1 console.log(count());  // 2 

getCounter() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 getCounterLexicalEnvironment = { environmentRecord: {   counter: 0,   <anonymous function> : < reference to function> } outer: <globalLexicalEnvironment> } 

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ count рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬрдм count() рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 countLexicalEnvironment = { environmentRecord: { } outer: <getCountLexicalEnvironment> } 

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

рдЗрдВрдЬрди рдЪрд░ рдкрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ counter рдЪрд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЬреЛ getCounter() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, count() рд▓рд┐рдП рдкрд╣рд▓реА рдХреЙрд▓ рдХреЗ рдмрд╛рдж getCounter() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 getCounterLexicalEnvironment = { environmentRecord: {   counter: 1,   <anonymous function> : < reference to function> } outer: <globalLexicalEnvironment> } 

рд╣рд░ рдмрд╛рд░ count() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЬрди рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ counter рдЪрд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ getCounter() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдо


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

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

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


All Articles