Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

Всё, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± областях видимости Π² JavaScript (Π½ΠΎ боялись ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ)

Π£ JS Π΅ΡΡ‚ΡŒ нСсколько ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ, связанных с ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости (scope), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ всСгда ясны Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ (ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ). Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ посвящСна Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ стрСмится ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡƒΡ‡ΠΈΠ½Ρƒ областСй видимости JS, ΡƒΡΠ»Ρ‹ΡˆΠ°Π² Ρ‚Π°ΠΊΠΈΠ΅ слова, ΠΊΠ°ΠΊ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅, β€œthis”, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΈΠΌΡ‘Π½, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, лСксичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ ΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ области… НадСюсь, ΠΏΠΎ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Π²Ρ‹ смоТСтС ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вопросы:

β€” Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости?
β€” Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ глобальная/локальная ΠžΠ’?
β€” Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ пространство ΠΈΠΌΡ‘Π½ ΠΈ Ρ‡Π΅ΠΌ ΠΎΠ½ΠΎ отличаСтся ΠΎΡ‚ ΠžΠ’?
β€” Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this, ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ относится с ΠžΠ’?
β€” Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ ΠΈ лСксичСская ΠžΠ’?
β€” Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅?
β€” ΠΊΠ°ΠΊ ΠΌΠ½Π΅ всё это ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ ΡΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ?

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости?

Π’ JS ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости – это Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ контСкст Π² ΠΊΠΎΠ΄Π΅. ΠžΠ’ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ локально ΠΈΠ»ΠΈ глобально. ΠšΠ»ΡŽΡ‡ ΠΊ написанию ΠΏΡƒΠ»Π΅Π½Π΅ΠΏΡ€ΠΎΠ±ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° – ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠžΠ’. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступны, ΠΊΠ°ΠΊ ΠΌΠ΅Π½ΡΡ‚ΡŒ контСкст Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ быстрый ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ быстрСС). Π Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с ΠžΠ’ просто – Π·Π°Π΄Π°Ρ‘ΠΌ сСбС вопрос, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΠžΠ’ ΠΌΡ‹ сСйчас находимся, Π² А ΠΈΠ»ΠΈ Π² Π‘?

Π§Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ глобальная/локальная ΠžΠ’?

НС написав Π½ΠΈ строчки ΠΊΠΎΠ΄Π°, ΠΌΡ‹ ΡƒΠΆΠ΅ находимся Π² глобальной ΠžΠ’. Если ΠΌΡ‹ сразу опрСдСляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΎΠ½Π° находится Π² глобальной ΠžΠ’.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ ΠžΠ’ – ваш Π»ΡƒΡ‡ΡˆΠΈΠΉ Π΄Ρ€ΡƒΠ³ ΠΈ Ρ…ΡƒΠ΄ΡˆΠΈΠΉ ΠΊΠΎΡˆΠΌΠ°Ρ€. ΠžΠ±ΡƒΡ‡Π°ΡΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠžΠ’, Π²Ρ‹ Π½Π΅ встрСтитС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с глобальной ΠžΠ’, Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ пСрСсСчСния ΠΈΠΌΡ‘Π½. Часто ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ «глобальная ΠžΠ’ – это ΠΏΠ»ΠΎΡ…ΠΎΒ», Π½ΠΎ нСчасто ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ объяснСниС – ΠΏΠΎΡ‡Π΅ΠΌΡƒ. Π“ΠžΠ’ – Π½Π΅ ΠΏΠ»ΠΎΡ…ΠΎ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ создании ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ доступны ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠžΠ’, просто Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ Π½Π° ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΈ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ.

ВсС ΠΌΡ‹ использовали jQuery. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ пишСм

ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ jQuery Π² глобальной ΠžΠ’, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π·Π²Π°Ρ‚ΡŒ этот доступ пространством ΠΈΠΌΡ‘Π½. Иногда Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «пространство ΠΈΠΌΡ‘Π½Β» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ вмСсто Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΠžΠ’, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠžΠ’ самого уровня. Π’ нашСм случаС jQuery находится Π² глобальной ΠžΠ’, ΠΈ являСтся нашим пространством ΠΈΠΌΡ‘Π½. ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΈΠΌΡ‘Π½ jQuery ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² глобальной ΠžΠ’, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ПИ для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ jQuery, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ всё Π΅Ρ‘ содСрТимоС наслСдуСтся ΠΎΡ‚ этого ПИ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ локальная ΠžΠ’?

Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠžΠ’ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π»ΡŽΠ±ΡƒΡŽ ΠžΠ’, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ послС глобальной. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° Π“ΠžΠ’, ΠΈ каТдая опрСдСляСмая функция нСсёт Π² сСбС Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠžΠ’. КаТдая функция, опрСдСлённая Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠΌΠ΅Π΅Ρ‚ своё локальноС ΠžΠ’, связанноС с ΠžΠ’ внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Если я ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π·Π°Π΄Π°ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ локальной ΠžΠ’. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ВсС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· Π›ΠžΠ’ Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹ Π² Π“ΠžΠ’. К Π½ΠΈΠΌ нСльзя ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ снаруТи Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ β€œname” относится ΠΊ локальной ΠžΠ’, ΠΎΠ½Π° Π½Π΅ Π²ΠΈΠ΄Π½Π° снаруТи ΠΈ поэтому Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ ΠžΠ’.

ВсС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠžΠ’ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠžΠ’, ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° for ΠΈΠ»ΠΈ while ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° if ΠΈΠ»ΠΈ switch. Новая функция – новая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π°ΠΊ просто ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠžΠ’ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

ЛСксичСская ΠžΠ’

Если ΠΎΠ΄Π½Π° функция ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, внутрСнняя ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ ΠžΠ’ внСшнСй. Π­Ρ‚ΠΎ называСтся «лСксичСской ΠžΠ’Β», ΠΈΠ»ΠΈ Β«Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ΠΌΒ», ΠΈΠ»ΠΈ Π΅Ρ‰Ρ‘ «статичСской ΠžΠ’Β».

Π‘ лСксичСской ΠžΠ’ довольно просто Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ – всё, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² ΠžΠ’ родитСля, доступно Π² ΠžΠ’ Ρ€Π΅Π±Π΅Π½ΠΊΠ°. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

Π’ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ сторону это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

ВсСгда ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ссылку Π½Π° β€œname”, Π½ΠΎ Π½Π΅ саму ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠžΠ’

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠžΠ’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠžΠ’ любой Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ опрСдСляСмой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ своя ΠžΠ’, ΠΈ каТдая функция, опрСдСляСмая Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΈΠΌΠ΅Π΅Ρ‚ свой ΠžΠ’, связанный с ΠžΠ’ внСшнСй – это ΠΈ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΈΠ»ΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°. ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ опрСдСляСт ΠžΠ’. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, JS ΠΈΠ΄Ρ‘Ρ‚ ΠΎΡ‚ самой Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠžΠ’ Π½Π°Ρ€ΡƒΠΆΡƒ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ ΠΈΡΠΊΠΎΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

Замыкания

Π–ΠΈΠ²ΡƒΡ‚ Π² тСсном союзС с лСксичСскими ΠžΠ’. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ использования являСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ссылки Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π°Ρ€ΡƒΠΆΡƒ Ρ€Π°Π·Π½Ρ‹Π΅ ссылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ доступ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ.

Π§Ρ‚ΠΎΠ±Ρ‹ вывСсти Π½Π° экран тСкст, нСдостаточно просто Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sayHello:

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, поэтому Π΅Ρ‘ Π½Π°Π΄ΠΎ сначала ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ:

МоТно ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ:

МоТно Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎ ΠΈΡ… ΠΊΠΎΠ΄ выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Ѐункция Π½Π΅ обязана Π½ΠΈΡ‡Π΅Π³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ΠΌ. Π›ΡŽΠ±ΠΎΠΉ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠ·Π²Π½Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠžΠ’ создаёт Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅.

ΠžΠ’ ΠΈ ‘this’

КаТдая ΠžΠ’ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ своё Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ β€œthis”, Π² зависимости ΠΎΡ‚ способа Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠœΡ‹ всС использовали ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this, Π½ΠΎ Π½Π΅ всС ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡ‚ΡŒ отличия ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°Ρ…. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΎΠ½ΠΎ относится ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ самой внСшнСй ΠžΠ’, Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΎΠΊΠ½Ρƒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Π½ΡΡŽΡ‚ значСния this:

Π’ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ this. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠžΠ’ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ:

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ создали Π½ΠΎΠ²ΡƒΡŽ ΠžΠ’, которая вызываСтся Π½Π΅ ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° событий, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, относится ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ window. МоТно, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹:

Иногда Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠžΠ’ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ.
Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this Π½Π΅ относится ΠΊ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌΡ‹ΠΌ элСмСнтам, ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΈ Π½Π΅ мСняСм ΠžΠ’. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠžΠ’ (Ρ‚ΠΎΡ‡Π½Π΅Π΅, ΠΌΡ‹ мСняСм контСкст Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ).

.bind() Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π° просто привязываСт значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ Π΅Ρ‘ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ. Как Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² ссылки Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, создав Π½ΠΎΠ²ΡƒΡŽ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ ΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠžΠ’

Π’ JavaScript, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, Π½Π΅Ρ‚ понятий ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… ΠžΠ’, Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡ… ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ. Для создания ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΉ ΠžΠ’ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ наши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Но Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ нСльзя:

Π’ΠΎΡ‚ Π²Π°ΠΌ ΠΈ приватная ΠžΠ’. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° публичная ΠžΠ’, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ‚Ρ€ΡŽΠΊΠΎΠΌ. Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ пространство ΠΈΠΌΡ‘Π½ Module, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит всё, относящССся ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ:

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° return Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, доступныС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ, Π² глобальной ΠžΠ’. ΠŸΡ€ΠΈ этом ΠΎΠ½ΠΈ относятся ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ пространству ΠΈΠΌΡ‘Π½. ΠœΠΎΠ΄ΡƒΠ»ΡŒ Module ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², сколько Π½ΡƒΠΆΠ½ΠΎ.

НС Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ Π²Ρ‹Π²Π°Π»ΠΈΠ²Π°Ρ‚ΡŒ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠžΠ’ ΠΈ Π·Π°Π³Ρ€ΡΠ·Π½ΡΡ‚ΡŒ Π΅Ρ‘. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΡƒΡŽ ΠžΠ’, Π½Π΅ возвращая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ publicMethod, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ privateMethod – ΠΎΠ½ относится ΠΊ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΉ ΠžΠ’. Π’ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡƒΠ½ΡƒΡ‚ΡŒ всё Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ β€” addClass, removeClass, Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ajax/XHR, Array, Object, ΠΈ Ρ‚.ΠΏ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹ΠΉ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠžΠ’ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ доступ ΠΊ Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ, поэтому ΠΈΠ· ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² глобальной ΠžΠ’ нСдоступны:

Π­Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. Π Π°Π΄ΠΈ бСзопасности Π½Π΅ стоит Π²Ρ‹Π²Π°Π»ΠΈΠ²Π°Ρ‚ΡŒ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠžΠ’, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π½Π΅ Π²Ρ‹Π·Π²Π°Π»ΠΈ Π±Ρ‹ Π½Π΅Π½Π°Ρ€ΠΎΠΊΠΎΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с использованиСм ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… ΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

Π£Π΄ΠΎΠ±Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с подчёркивания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΡ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ…:

Π£Π΄ΠΎΠ±Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ списком, возвращая ссылки Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости. ΠžΡΠ½ΠΎΠ²Ρ‹

Одной ΠΈΠ· самых основных ΠΈΠ΄Π΅ΠΉ практичСски всСх языков программирования являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ значСния Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π° ΠΏΠΎΠ·ΠΆΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΡΡ‚ΡŒ эти значСния.

ΠŸΡ€Π°Π²ΠΈΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡ… Π½Π°ΠΉΡ‚ΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Ρ‡Π΅Ρ‚ΠΊΠΈΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ. Π­Ρ‚ΠΈ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΌ доступны Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… мСстах ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ процСсс поиска ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ (ΠΈΠΌΠ΅Π½ΠΈ).

Если Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ тСхничСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π·Π²ΡƒΡ‡ΠΈΡ‚ Ρ‚Π°ΠΊ:

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ просто β€œΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости” (Π°Π½Π³Π». variable scope ΠΈΠ»ΠΈ просто scope) β€” это такая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ установлСна связь ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π΅Ρ‘ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ (ΠΈΠΌΠ΅Π½Π΅ΠΌ), ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π—Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ области видимости Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связан с Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π»ΠΈΠ±ΠΎ Π±Ρ‹Ρ‚ΡŒ свободным (Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ связанным Π½ΠΈ с ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…).

Для понимания этой ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ привСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ аналогию. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±Ρ‹Π»Π° Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° дСловая встрСча Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ бизнСс-Ρ†Π΅Π½Ρ‚Ρ€Π΅, Π³Π΄Π΅ ΠΎΠ½ Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅ Π±Ρ‹Π». Он Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚ ΠΈ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°ΠΌ Π΅Ρ‰Π΅ Π½ΠΈΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚, ΠΎΠ½ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ врСмя, для этого Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ часы. Π­Ρ‚ΠΎΡ‚ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ часы, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Π΅ часы ΠΈ ΡƒΠ·Π½Π°Ρ‘Ρ‚ ΠΏΠΎ Π½ΠΈΠΌ врСмя.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅ пСрСмСнная, которая прСдставляСт собой β€œΠ½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Π΅ часы”, Π² JavaScript ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

РазовьСм аналогию дальшС ΠΈ прСдставим, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΡŒ часов Π² ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅ ΠΈ Π½Π΅Ρ‚, этот Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Ρ…ΠΎΠ»Π»Π΅ здания Π΅ΡΡ‚ΡŒ настСнныС часы. Он Π·Π½Π°Π΅Ρ‚ ΠΎΠ± этом, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ проходя Π² ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚, ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠ» ΠΈΡ… Π½Π°Π»ΠΈΡ‡ΠΈΠ΅. И поэтому, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (врСмя) ΠΈΠ· своСго окруТСния β€” β€œΠ²Ρ‹Π³Π»ΡΠ½ΡƒΡ‚ΡŒβ€ ΠΈΠ· ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π° ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ врСмя Π½Π° настСнных часах.

Π’ этой Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Π·Π΄Π°Π½ΠΈΠ΅ β€” это Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, которая Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ для области видимости β€œΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚β€. Π’ Π΄Π°Π½Π½ΠΎΠΌ Π·Π΄Π°Π½ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ β€œΡ‡Π°ΡΡ‹β€ ( clock ) связан с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ β€œΠ½Π°ΡΡ‚Π΅Π½Π½Ρ‹Π΅ часы Π² холлС”. И объявлСниС этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ эту аналогию. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Π² Π·Π΄Π°Π½ΠΈΠΈ Π½Π΅Ρ‚ часов, Π½ΠΎ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ Π½Π° ΡƒΠ»ΠΈΡ†Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π΄Π°ΠΆΠ΅ Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ Π² ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ своСму ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ β€” Π²Ρ‹Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΡƒΠ»ΠΈΡ†Ρƒ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ врСмя Π½Π° ΡƒΠ»ΠΈΡ‡Π½Ρ‹Ρ… часах.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

Π’ JavaScript области видимости ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ функциями (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости) ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ инструкций (блочная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости).

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с часами Π½Π° JavaScript ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, нСдоступны снаруТи, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Ссли часы Π΅ΡΡ‚ΡŒ Π² ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅, Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ находится Π² Π·Π΄Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π° ΡƒΠ»ΠΈΡ†Π΅, Π³Π΄Π΅ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… часов, Ρ‚ΠΎ обратится ΠΊ часам Π² ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅ ΠΎΠ½ Π½Π΅ смоТСт. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ прСдставлСния ΠΎ содСрТимом ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π°, ΠΏΠΎΠΊΠ° Ρ‚ΡƒΠ΄Π° Π½Π΅ Π·Π°ΠΉΠ΄Π΅Ρ‚.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

Если Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСмСнная Π±Ρ‹Π»Π° доступна ΠΎΡ‚ΠΎΠ²ΡΡŽΠ΄Ρƒ, Ρ‚ΠΎ Π΅Ρ‘ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π²Π½Π΅ всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ глобально.

Π’ нашСй Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ, ΠΏΡƒΡΡ‚ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ всСлСнная, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ часы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ· любой Ρ‚ΠΎΡ‡ΠΊΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Ссли ΠΎΠ½ΠΈ доступны ΠΈΠ· любой Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² глобальной, самой внСшнСй области видимости. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ нСдоступны снаруТи, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости, ограничСнная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΎΠΌ, это локальная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Π½Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π° Π½ΠΈ Π² ΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ области ΠΈ находится Π²Π½Π΅ всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, являясь Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ для всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Π½Π΅Ρ‘ областСй видимости. И для объявлСния глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ clock наш ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π’ случаС, Ссли ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ пСрСмСнная объявлСна Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… областях видимости, Π΅Ρ‘ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€Π°Ρ‚ΡŒΡΡ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости, Π³Π΄Π΅ ΠΎΠ½Π° Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ. НапримСр:

Π­Ρ‚ΠΎ называСтся β€œΠ·Π°Ρ‚Π΅Π½Π΅Π½ΠΈΠ΅ пСрСмСнных”, ΠΊΠΎΠ³Π΄Π° тСкущая пСрСмСнная скрываСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ объявлСнной Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ области видимости. Π’ΠΎΠΎΠ±Ρ‰Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈ нСясности Π² Ρ‚ΠΎΠΌ, Π² ΠΊΠ°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‡Ρ‚ΠΎ хранится, Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π°Ρ‚Π΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Пока Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Ρ€Π°Π·Π±ΠΈΡ€Π°Π»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ области, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ функциями. Но Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π±Π»ΠΎΠΊΠΎΠΌ инструкций.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² JavaScript scope

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² JavaScript scope (ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Π±Π»ΠΎΠΊΠ°).

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈΠ»ΠΈ Scope

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости (scope) опрСдСляСт Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ рСсурса) Π² области Ρ‚Π²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈΠ»ΠΈ Global Scope

Π’ JavaScript Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° глобальная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. ΠžΠ±Π»Π°ΡΡ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ считаСтся глобальной ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² глобальной области, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ доступны ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π² Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… областях.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈΠ»ΠΈ Local Scope

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, становятся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ локальной области. КаТдая функция ΠΈΠΌΠ΅Π΅Ρ‚ свою ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. Одна ΠΈ Ρ‚Π° ΠΆΠ΅ пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… функциях, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ связаны с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ функциями ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π·Π°ΠΈΠΌΠ½ΠΎ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости Π±Π»ΠΎΠΊΠ°

ЛСксичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости

ДинамичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости

ДинамичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, ΠΏΠΎ понятным ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сущСствуСт модСль, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ динамичСски Π²ΠΎ врСмя выполнСния, Π° Π½Π΅ статичСски Π²ΠΎ врСмя создания. НапримСр:

ДинамичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², Π½Π΅ связана с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π³Π΄Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ области, Π° связана с Ρ‚Π΅ΠΌ, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° областСй видимости основана Π½Π° стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π° Π½Π΅ Π½Π° Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ областСй видимости Π² ΠΊΠΎΠ΄Π΅.

Как Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ?

МоТно ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это странно.

Но JavaScript, Π½Π° самом Π΄Π΅Π»Π΅, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ динамичСской области видимости. Он ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»Π΅ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. А Π²ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ this ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ динамичСской области видимости.

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†: this заботится ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π° функция. Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΌ, насколько тСсно ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ this связан с ΠΈΠ΄Π΅Π΅ΠΉ динамичСской области видимости.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠ±Π»Π°ΡΡ‚ΠΈ видимости ΠΈ замыкания Π² JavaScript

Данная публикация прСдставляСт собой ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Β«JavaScript Scope and ClosuresΒ» ΠΏΠΎΠ΄ авторством Zell Liew, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ здСсь.

ΠžΠ±Π»Π°ΡΡ‚ΠΈ видимости ΠΈ замыкания Π²Π°ΠΆΠ½Ρ‹ Π² JavaScript, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ сбивали мСня с Ρ‚ΠΎΠ»ΠΊΡƒ, ΠΊΠΎΠ³Π΄Π° я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π» ΠΈΡ… ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ объяснСния этих Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Π½ΠΈΡ….

НачнСм с областСй видимости

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости Π² JavaScript опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ доступны Π²Π°ΠΌ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° областСй видимости: глобальная ΠΈ локальная.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости

Если пСрСмСнная объявлСна Π²Π½Π΅ всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок ( <> ), Ρ‚ΠΎ считаСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² глобальной области видимости.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: это Π²Π΅Ρ€Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для JavaScript Π² Π²Π΅Π± Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…. Π’ Node.js Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ½Π°Ρ‡Π΅, Π½ΠΎ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ Node.js Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ происходит объявлСниС глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π΅Π·Π΄Π΅ Π² ΠΊΠΎΠ΄Π΅, Π΄Π°ΠΆΠ΅ Π² функциях.

Π˜Ρ‚Π°ΠΊ, слСдуСт всСгда ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π° Π½Π΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ части ΠΊΠΎΠ΄Π°, ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

Π’ JavaScript Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… областСй видимости:

Π‘Π½Π°Ρ‡Π°Π»Π° рассмотрим ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ, объявлСнная Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Код снаруТи Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊ Π½Π΅ΠΉ доступа.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅, пСрСмСнная hello находится Π²Π½ΡƒΡ‚Ρ€ΠΈ области видимости Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sayHello :

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости Π±Π»ΠΎΠΊΠ°

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ пСрСмСнная hello находится Π²Π½ΡƒΡ‚Ρ€ΠΈ области видимости Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок:

Блочная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости являСтся частным случаСм области видимости Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚.ΠΊ. Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ с Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками (ΠΊΡ€ΠΎΠΌΠ΅ случаСв использования стрСлочных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с нСявным Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ значСния).

ПодъСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² области видимости

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ Β«function declarationΒ» (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: функция Π²ΠΈΠ΄Π° function имя(ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹) ), всСгда ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π½Π°Π²Π΅Ρ€Ρ… Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости. Π’Π°ΠΊ, Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½ΠΈΠΆΠ΅ эквивалСнтны:

Если ΠΆΠ΅ функция ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Β«function expressionΒ» (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: функция Π²ΠΈΠ΄Π° var f = function (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹) ), Ρ‚ΠΎ такая функция Π½Π΅ поднимаСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости.

Из-Π·Π° этих Π΄Π²ΡƒΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² подъСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΈΡ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ, поэтому Π½Π΅ рСкомСндуСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. ВсСгда сначала ΠΎΠ±ΡŠΡΠ²Π»ΡΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π£ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅Ρ‚ доступа ΠΊ областям видимости Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ доступа ΠΊ областям видимости Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ΄Π½Π° функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ области видимости

Когда функция ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ внутрСнняя функция ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ называСтся Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ лСксичСских областСй видимости.

Π’ Ρ‚ΠΎΠΆΠ΅ врСмя внСшняя функция Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ области видимости, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ одностороннСС Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ находится с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π½ΠΎ Ρ‚Π΅, ΠΊΡ‚ΠΎ стоят с ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ стороны (Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ стороны), Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ вас.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

Если ΠΎΠ΄Π½ΠΈ области видимости Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ мноТСство стСклянных повСрхностСй с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ дСйствия, описанным Π²Ρ‹ΡˆΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

Если Π²Ρ‹ поняли всС, Ρ‡Ρ‚ΠΎ касаСтся областСй видимости, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ замыкания.

Замыкания

Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ создаСтС Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅. Говорят, Ρ‡Ρ‚ΠΎ внутрСнняя функция являСтся Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ΠΌ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ замыкания ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² дальнСйшСм становятся доступными ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’Π°ΠΊ ΠΊΠ°ΠΊ внутрСнняя функция являСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, совмСстив Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ значСния с объявлСниСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Благодаря замыканиям появляСтся доступ ΠΊ внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, поэтому ΠΎΠ½ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π΄Π²ΡƒΡ… Ρ†Π΅Π»Π΅ΠΉ:

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ

ΠŸΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° производятся ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дСйствия ΠΏΠΎΠΌΠΈΠΌΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° значСния послС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Π²Π΅Ρ‰Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ эффСктом, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ajax-запрос, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ console.log:

Когда замыкания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для контроля ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов, Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ajax-запросы ΠΈΠ»ΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹).

Для пояснСния рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Допустим, трСбуСтся ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ€Ρ‚ ΠΊΠΎ дню роТдСния вашСго Π΄Ρ€ΡƒΠ³Π°. ΠŸΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ€Ρ‚Π° Π·Π°ΠΉΠΌΠ΅Ρ‚ сСкунду, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ написанная функция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Β«Ρ‚ΠΎΡ€Ρ‚ испСчён» Ρ‡Π΅Ρ€Π΅Π· сСкунду.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: для краткости ΠΈ простоты Π΄Π°Π»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ стрСлочныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· ES6.

Как ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, такая функция ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

ПослС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΡ€Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ испСчён Ρ€ΠΎΠ²Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· сСкунду.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, допустим, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΡ€Ρ‚ Π±Ρ‹Π» испСчён сразу послС уточнСния вкуса, Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΡ€Ρ‚ Π±Ρ‹Π» испСчён ΠΏΠΎΠ·ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° это потрСбуСтся.

Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² любоС врСмя, ΠΊΠΎΠ³Π΄Π° это трСбуСтся, ΠΈ Ρ‚ΠΎΡ€Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ Ρ‡Π΅Ρ€Π΅Π· сСкунду.

Π’Π°ΠΊ замыкания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов β€” вызываСтся функция, которая Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ТСланию.

ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с замыканиями

Как Π²Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Π΅Ρ‚Π΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, созданныС Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ доступны снаруТи. Из-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ доступны, ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ.

Однако ΠΈΠ½ΠΎΠ³Π΄Π° трСбуСтся доступ ΠΊ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ замыкания.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ saySecretCode β€” СдинствСнная функция (Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅), которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ secretCode снаруТи исходной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ secret. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ.

ΠžΡ‚Π»Π°Π΄ΠΊΠ° областСй видимости с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DevTools

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° (DevTools) Chrome ΠΈ Firefox ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости. БущСствуСт Π΄Π²Π° способа примСнСния этого Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ: Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово debugger Π² ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ JavaScript ΠΊΠΎΠ΄Π° Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… с Ρ†Π΅Π»ΡŒΡŽ дальнСйшСй ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

НиТС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с prepareCake :

Если ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ DevTools ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Sources Π² Chrome (ΠΈΠ»ΠΈ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Debugger Π² Firefox), Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ доступныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ debugger Π²Π½ΡƒΡ‚Ρ€ΡŒ замыкания. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ области видимости ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² этот Ρ€Π°Π·:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ: Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π±Ρ€Π΅ΠΉΠΊΠΏΠΎΠΈΠ½Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² ΠΊΠΎΠ΄ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Sources (ΠΈΠ»ΠΈ Debugger) ΠΏΡƒΡ‚Π΅ΠΌ ΠΊΠ»ΠΈΠΊΠ° Π½Π° Π½ΠΎΠΌΠ΅Ρ€ строки.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠ±Π»Π°ΡΡ‚ΡŒ Видимости Π² JavaScript

Russian (Pусский) translation by Anton L (you can also view the original English article)

ПониманиС, ΠΊΠ°ΠΊ ΠΆΠ΅ Π΄Π²ΠΈΠΆΠΎΠΊ JavaScript «Π΄ΡƒΠΌΠ°Π΅Ρ‚» ΠΎ области видимости прСдостСрСТёт вас ΠΎΡ‚ извСстных ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ всплытиС (hoisting), ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ вас ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с замыканиями (closures), ΠΈ вСроятнСС всСго Π²Ρ‹ Π½Π΅ сдСлаСтС этих ошибок, послС прочтСния Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

. Π’ любом случаС, ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ всплытиС ΠΈ замыкания.

Π’ Π½Π΅ΠΉ ΠΌΡ‹ рассмотрим:

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ ES6 ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис ΠΈ особСнности спСцификации, для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΈ упрощСния своСго JavaScript ΠΊΠΎΠ΄Π°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° курса:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scopeΠ§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scopeΠ§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости scope

ЛСксичСская ΠžΠ±Π»Π°ΡΡ‚ΡŒ Видимости

БущСствуСт Ρ‚Ρ€ΠΈ способа Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Π² JavaScript:

ΠœΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· этих ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π² ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Ρ… дСталях. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ JavaScript опрСдСляСт какая пСрСмСнная, ΠΊΠ°ΠΊΠΎΠΉ области видимости ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈ: Π‘ Высоты ΠŸΡ‚ΠΈΡ‡ΡŒΠ΅Π³ΠΎ ΠŸΠΎΠ»Ρ‘Ρ‚Π°

Когда Π²Ρ‹ запускаСтС JavaScript ΠΊΠΎΠ΄, происходят Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π’ΠΎ врСмя компиляции, JavaScript Π΄Π²ΠΈΠΆΠΎΠΊ:

Π¨Π°Π³ 1: ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ компилятор.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ большС Π½Π΅Ρ‚ объявлСний ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, компилятор вСрнётся Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. Π’Π°ΠΌ Π½Π΅Ρ‚ объявлСний ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π° этом Ρ„Π°Π·Π° компиляции закончится.

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π½Π°Π΅Ρ‚:

НС Π²Π°ΠΆΠ½ΠΎ Ссли ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ значСния этим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС нашСго ΠΊΠΎΠ΄Π°. Π”Π²ΠΈΠΆΠΎΠΊ JavaScript позаботится ΠΎΠ± этом Π²ΠΎ врСмя выполнСния.

Π¨Π°Π³ 2: Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

Π’ΠΎ врСмя ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„Π°Π·Ρ‹, Π΄Π²ΠΈΠΆΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ наш ΠΊΠΎΠ΄Π° снова, Π½Π° этот Ρ€Π°Π·, выполняя Π΅Π³ΠΎ.

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ JavaScript происходит Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС, Ρ‡Π΅ΠΌ ΠΌΡ‹ Π΄ΡƒΠΌΠ°Π»ΠΈ!

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ поняли, ΠΊΠ°ΠΊ JavaScript Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈ выполняСт, написанный Π²Π°ΠΌΠΈ ΠΊΠΎΠ΄ ΠΈ ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ всплытиС.

ВсплытиС ΠΏΠΎΠ΄ ΠœΠΈΠΊΡ€ΠΎΡΠΊΠΎΠΏΠΎΠΌ

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°.

Запустив этот ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ВсплытиС ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ JavaScript Π΄Π΅Π»Π°Π΅Ρ‚ всС наши ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… доступными Π²Π΅Π·Π΄Π΅, Π² ΠΈΡ… области видимости Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ присвоим ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ВсплытиС ОбъявлСния ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

ВмСсто этого ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ undefined ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ пытаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Π² Ρ‚ΠΎΠΌ случаСт Ссли Π²Ρ‹ попроситС Π΅Π³ΠΎ ΠΎΠ± этом. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Зная ΠΎΠ± этом, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ JavaScript Π²ΠΈΠ΄ΠΈΡ‚ Π² нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ bar ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ:

Π­Ρ‚ΠΎ ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Всплытия: ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ доступны Π² ΠΈΡ… области видимости, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ undefined ΠΏΠΎΠΊΠ° Π² ΠΊΠΎΠ΄Π΅ ΠΈΠΌ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Если ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом, это ΠΈΠΌΠ΅Π΅Ρ‚ смысл. Π‘Ρ€Π°Π·Ρƒ становится понятно ΠΏΠΎΡ‡Π΅ΠΌΡƒ bar Π²Π΅Π΄Ρ‘Ρ‚ сСбя Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пишСм ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ Π΄Π²ΠΈΠΆΠΎΠΊ JavaScript Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΅Π³ΠΎ, Π½Π΅ΠΏΡ€Π°Π²Π΄-Π»ΠΈ? Π’Π°ΠΊ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚Π°ΠΊ всСгда?

ВсплытиС Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ВыраТСния (Function Expression)

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ TypeError ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΊΠΎΠ³Π΄Π° пытаСмся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ broken Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, Ρ‚ΠΎΠΆΠ΅ относится ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ всплытия.

ВсплытиС ОбъявлСния Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Function Declaration)

Ну ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ†, зная это, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ bar Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π­Ρ‚ΠΎ связано со Π’Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠŸΡ€Π°Π²ΠΈΠ»ΠΎΠΌ Всплытия: ΠΊΠΎΠ³Π΄Π° JavaScript компилятор Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, имя ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступно свСрху области видимости, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ снова ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ наш ΠΊΠΎΠ΄:

И ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π½Π΅ каТСтся-Π»ΠΈ Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ JavaScript ΠΊΠΎΠ΄, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΅Π³ΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ?

По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π΅ совсСм Ρ‚Π°ΠΊ.

. А Ρ‚Π°ΠΊΠΆΠ΅ пСрСмСнная ΡƒΠ±ΡŒΡ‘Ρ‚ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ Ρ€Π°Π½Π΅Π΅.

Π’Π΅ΠΌ самым Ρƒ вас всСгда Π±ΡƒΠ΄ΡƒΡ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Ρƒ const Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ присвоили.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ Видимости Π‘Π»ΠΎΠΊΠ°

Π£ let ΠΈ const Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ var : Ρ€Π°Π·ΠΌΠ΅Ρ€ области видимости.

Если Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‡Π΅Ρ€Π΅Π· const ΠΈΠ»ΠΈ let Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ°, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ этого Π±Π»ΠΎΠΊΠ° ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ присвоитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ЛСксичСский this ΠΈ стрСлочная функция

По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π΅ всСгда. Π’ JavaScript Π½Π΅ Π²Π°ΠΆΠ½ΠΎ Π³Π΄Π΅ Π²Ρ‹, Π² ΠΊΠ°ΠΊΠΎΠΉ области видимости, использовали слово this :

ВмСсто этого создаётся Π½ΠΎΠ²Ρ‹ΠΉ this Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ опрСдСляСтС, Π΄Π²ΠΈΠΆΠΎΠΊ рассматриваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this Π² зависимости Π½Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ Π³Π΄Π΅ Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π° ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ Π΅Ρ‘ Π²Ρ‹Π·Π²Π°Π»ΠΈ.

ΠŸΠΎΡ…ΠΎΠΆΠΈΠΉ случай ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ пСрСопрСдСляСтС Π»ΡŽΠ±ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области видимости:

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ this Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ лСксичСской области видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ:

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, стрСлочная функция Π½Π΅ скрываСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ области видимости, устанавливая ΠΏΡ€ΠΈ этом Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ВмСсто этого Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ лСксичСски привязаны ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ this.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ this Π² стрСлочной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, JavaScript ΠΈΡ‰Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°Π²Π΅Ρ€Ρ…Ρƒ, ΠΊΠ°ΠΊ ΠΈ Π² случаС с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ.

Π’ Π½Π°Ρ‡Π°Π»Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this ищСтся Π² локальной области видимости. Π’Π°ΠΊ ΠΊΠ°ΠΊ стрСлочная функция Π½Π΅ устанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this, Ρ‚Π°ΠΌ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. ПослС этого Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒΡΡ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ области видимости. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ найдётся Ρ‚Π°ΠΌ, Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Π’Π΅ΠΌ самым ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π²Ρ‹ΡˆΠ΅:

Π‘ΠΎΠ»ΡŒΡˆΠ΅ подробностСй ΠΎ стрСлочных функциях рассказываСт инструктор Envato Tuts+ Dan Wellman Π² курсС ΠžΡΠ½ΠΎΠ²Ρ‹ JavaScript ES6, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ MDN ΠΏΠΎ стрСлочным функциям.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ c ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π°Ρ‡Π°Π»Π° этой ΡΡ‚Π°Ρ‚ΡŒΠΈ! ΠœΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ:

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ рассмотрСли Π΄Π²Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° всплытия:

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ JavaScript, Π² качСствС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ шага. Для этого ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π²Π°ΠΌ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ со ΡΡ‚Π°Ρ‚ΡŒΡ‘ΠΉ ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈ Замыкания Kyle Simpson’Π°.

Π‘ΠΎ всСми Π½ΠΎΠ²Ρ‹ΠΌΠΈ знаниями, Π½Π°Ρ‡ΠΈΠ½Π°ΠΉΡ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ ошибки!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *