рдХреНрд▓реЛрдЬрд╝рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдореВрд▓рднреВрдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХрдИ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рд░ рдЬреЗрдПрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЬрд╛рдирдирд╛ рдФрд░ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрд▓реЛрдЬрд░ рдХреА рдЕрдЪреНрдЫреА рд╕рдордЭ рд╣реЛрдиреЗ рдкрд░, рдЖрдк рдмреЗрд╣рддрд░, рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдФрд░ рдХреНрд▓реАрдирд░ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣, рдмрджрд▓реЗ рдореЗрдВ, рдЖрдкрдХреЗ рдкреЗрд╢реЗрд╡рд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрдЧрд╛ред
рд╕рд╛рдордЧреНрд░реА, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдХрд╣рд╛рдиреА рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИред
рдПрдХ рдмрдВрдж рдХреНрдпрд╛ рд╣реИ?
рдХреНрд▓реЛрдЬрд░ рдПрдХ рдРрд╕рд╛ рдлрдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдлрдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЧрдард┐рдд рд╕реНрдХреЛрдк рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж рднреА рдпрд╣ рдПрдХреНрд╕рдЯрд░реНрдирд▓ рдлрдВрдХреНрд╢рди рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рддрд░реНрдХред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо "рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдкрд░реНрдпрд╛рд╡рд░рдг" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред
рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреНрдпрд╛ рд╣реИ?
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ "рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд╛рддрд╛рд╡рд░рдг" рдпрд╛ "рд╕реНрдерд┐рд░ рд╡рд╛рддрд╛рд╡рд░рдг" рд╢рдмреНрдж рдХрд╛ рдЕрд░реНрде рд╣реИ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЙрдирдХреЗ рднреМрддрд┐рдХ рд╕реНрдерд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрд░, рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
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();
рдпрд╣рд╛рдВ рд╣рдо
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());
рдпрд╣рд╛рдВ, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣, рд╣рдо рдЪрд░
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();
рдЬрдм
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());
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()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдЪрд░реНрдЪрд╛ рдХреА рдХрд┐ рдХреНрд▓реЛрдЬрд╝рд░ рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдВрддреНрд░реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрд▓реЛрдЬрд╝рд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореВрд▓рднреВрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЬреЗрдПрд╕ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрд▓реЛрдЬрд░ рдХреЛ рд╕рдордЭрдирд╛ рдкреНрд░рднрд╛рд╡реА рдФрд░ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЗрдПрд╕ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЕрдиреБрднрд╡ рд╣реИ, рддреЛ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред
