Найти Π² Π”Π·Π΅Π½Π΅
CodeSnack

πŸ” JavaScript ΠŸΠ΅Ρ€Π΅ΠΊΡƒΡ: ЛСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ (Lexical Environment) β€” ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?

ЛСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ (Lexical Environment) β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ структура, которая создаСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°. Она Ρ…Ρ€Π°Π½ΠΈΡ‚ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, доступныС Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ контСкстС выполнСния. КаТдая функция "ΠΏΠΎΠΌΠ½ΠΈΡ‚" своё лСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎ мСсто Π² ΠΊΠΎΠ΄Π΅, Π³Π΄Π΅ ΠΎΠ½Π° Π±Ρ‹Π»Π° создана. ИмСнно благодаря этому Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· своСго Π±Π»ΠΎΠΊΠ°, Π½ΠΎ ΠΈ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ², Π³Π΄Π΅ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹. πŸ’‘ ΠŸΡ€ΠΈΠΌΠ΅Ρ€: πŸ‘€Β Π§Ρ‚ΠΎ происходит? ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Β outer() создаСтся своё лСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚Β outerVar.
Ѐункция inner()Β Ρ‚Π°ΠΊΠΆΠ΅ создаСт своё ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉΒ innerVar.
Однако inner()Β ΠΌΠΎΠΆΠ΅Ρ‚ "Π²ΠΈΠ΄Π΅Ρ‚ΡŒ" ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· внСшнСго окруТСния (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС outerVar), Π° Π²ΠΎΡ‚ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ β€” внСшняя функция Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ. ⚑️ Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ ΡΡƒΡ‚ΡŒ лСксичСского окруТСния: доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ опрСдСляСтся Ρ‚Π΅ΠΌ мСстом, Π³Π΄Π΅ функция Π±Ρ‹Π»Π°Β ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π°, Π° Π½Π΅ Π²Ρ‹Π·Π²Π°Π½Π°!

ЛСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ (Lexical Environment) β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ структура, которая создаСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°. Она Ρ…Ρ€Π°Π½ΠΈΡ‚ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, доступныС Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ контСкстС выполнСния.

КаТдая функция "ΠΏΠΎΠΌΠ½ΠΈΡ‚" своё лСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎ мСсто Π² ΠΊΠΎΠ΄Π΅, Π³Π΄Π΅ ΠΎΠ½Π° Π±Ρ‹Π»Π° создана. ИмСнно благодаря этому Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· своСго Π±Π»ΠΎΠΊΠ°, Π½ΠΎ ΠΈ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ², Π³Π΄Π΅ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹.

πŸ’‘ ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ javascript лСксичСского окруТСния (lexical environment)
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ javascript лСксичСского окруТСния (lexical environment)

πŸ‘€Β Π§Ρ‚ΠΎ происходит?

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Β outer() создаСтся своё лСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚Β outerVar.
Ѐункция inner()Β Ρ‚Π°ΠΊΠΆΠ΅ создаСт своё ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉΒ innerVar.
Однако inner()Β ΠΌΠΎΠΆΠ΅Ρ‚ "Π²ΠΈΠ΄Π΅Ρ‚ΡŒ" ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· внСшнСго окруТСния (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС outerVar), Π° Π²ΠΎΡ‚ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ β€” внСшняя функция Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ.

⚑️ Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ ΡΡƒΡ‚ΡŒ лСксичСского окруТСния: доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ опрСдСляСтся Ρ‚Π΅ΠΌ мСстом, Π³Π΄Π΅ функция Π±Ρ‹Π»Π°Β ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π°, Π° Π½Π΅ Π²Ρ‹Π·Π²Π°Π½Π°!