Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Javascript (Π»ΠΈΠΊΠ±Π΅Π·)

Для мСня ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Ρ… мСст Javascript Π±Ρ‹Π»ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Излагаю простым русским языком.

ΠžΠ±Π»Π°ΡΡ‚ΠΈ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Javascript Π±Ρ‹Π²Π°ΡŽΡ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ пСрСмСнная доступна Π²Π΅Π·Π΄Π΅, локальная β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости.

Из этого слСдуСт, Ρ‡Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Ρ‚ΠΈΡ€Π°Ρ‚ΡŒ свойства window (я ΡƒΠΆΠ΅ ΠΌΠΎΠ»Ρ‡Ρƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π·Π»ΠΎ, Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ ΠΈ всС Ρ‚Π°ΠΊΠΎΠ΅).

ОбъявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΈ присвоСнии значСния Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ»ΠΈ создаСтся глобальная пСрСмСнная.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π·Π°Ρ‚Π΅Ρ€Π΅Ρ‚ΡŒ лишнСго. По-ΠΌΠΎΠ΅ΠΌΡƒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΆ, это Π½Π΅ самоС странноС мСсто яваскрипта. Π’ любом случаС нСявного опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… стоит ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ.

Вакая строка всСгда создаСт Π½ΠΎΠ²ΡƒΡŽ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Если объявлСниС происходит Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ глобальной, Ρ‡Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ.

Как ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ? Как ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ссли Π΅ΡΡ‚ΡŒ локальная с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ? ΠžΡ‡Π΅Π½ΡŒ просто β€” Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΉ ΠΊΠ°ΠΊ ΠΊ свойству window :

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

МСня всСгда смущало Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Javascript ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΌ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Ну Π΄Π°, Ссли ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Ruby, ΠΈ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Ρ‚ΠΎΠΆΠ΅.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ этом ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ просто: Ссли Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСмСнная сущСствовала, Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΡ‚ΠΊΡƒΠ΄Π° Π±Ρ‹ Π΅Π΅ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΊΠΎΠ΄Π° ΠΏΠΎ старинкС β€” строкой, которая прогоняСтся Ρ‡Π΅Ρ€Π΅Π· eval() β€” Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ΄ это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΠ΄ исполняСтся Π² Ρ‚ΠΎΠΉ области видимости, Π³Π΄Π΅ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Javascript β€” это Ρ‚ΠΎΠΆΠ΅ Ρ‚ΠΈΠΏΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ свойство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° опрСдСляСтся Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ пСрСмСнная.

А Π΅Ρ‰Π΅ Π² Javascript ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ограничиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ функциями, Π° Π½Π΅ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° if (ΠΏΡ€ΠΈΠ²Π΅Ρ‚, Паскаль). ΠŸΠΎΡ‚ΠΎΠΌΡƒ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ всСго ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ повСдСнчСской Π»ΠΎΠ³ΠΈΠΊΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² создаваСмых DOM-событиях Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 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 (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹) ), Ρ‚ΠΎ такая функция Π½Π΅ поднимаСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости.

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

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

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

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

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

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

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

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

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

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

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

Замыкания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Всё, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± областях видимости Π² 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, ΠΈ Ρ‚.ΠΏ.

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

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

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

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

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

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

JavaScript: ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости простыми словами

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток, Π΄Ρ€ΡƒΠ·ΡŒΡ!

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости β€” ваТная концСпция, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Данная концСпция Π»Π΅ΠΆΠΈΡ‚ Π² основС Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ, раздСляя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ простыми словами ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Π² JavaScript.

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

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π² Π΄Π΅Ρ‚Π°Π»ΠΈ, связанныС с ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости, рассмотрим нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Допустим, ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:

ΠœΡ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌ вывСсти Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² консоль. Π­Ρ‚ΠΎ понятно.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ помСстим объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ message Π² Π±Π»ΠΎΠΊ if:

На этот Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ доступа ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ выбрасываСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ReferenceError: message is not defined.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ?

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊ if создал ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ message. И message доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ этой области.

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

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

Π˜Ρ‚Π°ΠΊ, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости β€” это Π·ΠΎΠ½Π° доступности ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

2. Блочная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости

Π‘Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° Π² JavaScript опрСдСляСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов const ΠΈ let:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ console.log() Π±Π»Π°Π³ΠΎΠΏΠΎΠ»ΡƒΡ‡Π½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ message Π² консоль, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ доступ ΠΊ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ осущСствляСтся Π² Ρ‚ΠΎΠΉ области видимости, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°.

Однако Π²Ρ‹Π·ΠΎΠ² Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ console.log() ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ возникновСнию ошибки, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пСрСмСнная message нСдоступна Π²ΠΎ внСшнСй ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π½Π΅ΠΉ области видимости: Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ контСкстС message Π½Π΅ сущСствуСт.

Π’ инструкциях if, for, while Ρ‚Π°ΠΊΠΆΠ΅ создаСтся блочная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ color ΠΈ message ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° for.

Π’ΠΎΠΆΠ΅ самоС справСдливо для инструкции while:

message, опрСдСлСнная Π² while, доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

Π’ JavaScript Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°. Они Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости:

2.1. var Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π±Π»ΠΎΡ‡Π½ΠΎΠΉ области видимости

Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° создаСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов const ΠΈ let. Однако это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова var.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ count, ΠΊΠ°ΠΊ ΠΈ оТидалось, доступна Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° if. Однако, ΠΎΠ½Π° доступна ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°!

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° Π½Π΅ создаСт области видимости для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова var. Но это Π΄Π΅Π»Π°Π΅Ρ‚ функция.

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² JavaScript ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости для всСх ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ (var, const ΠΈΠ»ΠΈ let).

Ѐункция run() создаСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ message доступна Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ нСдоступна снаруТи.

Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ функция создаСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ const ΠΈ let, ΠΈ Π΄Π°ΠΆΠ΅ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

4. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости модуля

ΠœΠΎΠ΄ΡƒΠ»ΠΈ ES6 Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ классов.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ circle создаСт константу pi (для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ использования):

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ pi ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля circle ΠΈ Π½Π΅ экспортируСтся ΠΈΠ· Π½Π΅Π³ΠΎ.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ circle импортируСтся:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ pi нСдоступна Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ модуля circle (Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ экспортирована с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ export).

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости инкапсулируСт ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ частныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для собствСнных Π½ΡƒΠΆΠ΄ модуля ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ ΠΎΡ‚ доступа ΠΈΠ·Π²Π½Π΅.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ инкапсуляции для Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

5. ΠžΠ±Π»Π°ΡΡ‚ΠΈ видимости ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ областСй видимости являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ ΠΎΠ΄Π½Π° Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ функция run() создаСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅ Π±Π»ΠΎΠΊ if создаСт Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ:

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости Π±Π»ΠΎΠΊΠ° if Π²Π»ΠΎΠΆΠ΅Π½Π° Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ run().

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости, находящаяся Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ области, называСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ β€” это ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Π±Π»ΠΎΠΊΠ° if.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости, содСрТащая Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, называСтся внСшнСй ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ β€” это ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ„ΡƒΠΊΠ½Ρ†ΠΈΠΈ run().

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

Π§Ρ‚ΠΎ насчСт доступности ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…? НуТно Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ простоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· внСшнСй области видимости доступны Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ пСрСмСнная message доступна Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° if.

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

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости являСтся самой внСшнСй ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ. Она доступна для любой Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΈΠ»ΠΈ локальной области видимости. Π’ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ глобальной являСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, создаваСмая ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ JavaScript-Ρ„Π°ΠΉΠ»Π°, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ src Ρ‚Π΅Π³Π° script:

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

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

Π’ JavaScript ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости β€” это ваТная, Π½ΠΎ нСоднозначная концСпция. ΠžΠ±Π»Π°ΡΡ‚ΠΈ видимости, ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΊ ΠΈΡ… использованию, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. Π’ этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ областСй видимости Π² JavaScript, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚. Π₯ΠΎΡ€ΠΎΡˆΠ΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ качСство ΠΊΠΎΠ΄Π°.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ
ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΠΎ запросу «области видимости». Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, Ссли Π²Ρ‹Π·Π²Π°Π»ΠΈ приступ Π½ΠΎΡΡ‚Π°Π»ΡŒΠ³ΠΈΠΈ )

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ области видимости выглядит Ρ‚Π°ΠΊ: это ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π³Π΄Π΅ компилятор ΠΈΡ‰Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Ρ‹. Π”ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π·Π²ΡƒΡ‡ΠΈΡ‚ это слишком просто? ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ вмСстС.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ JavaScript

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ± областях видимости, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ JavaScript, Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ воздСйствуСт Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ области видимости. ΠŸΡ€ΠΈ исполнСнии JS-ΠΊΠΎΠ΄Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ проходится ΠΏΠΎ Π½Π΅ΠΌΡƒ Π΄Π²Π°ΠΆΠ΄Ρ‹.

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

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ это ΠΏΠΎΠ½ΡΡ‚ΡŒ, рассмотрим простой Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄, послС компиляции, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π—Π΄Π΅ΡΡŒ Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ объявлСния ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡ… Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости. Π­Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ Π½ΠΈΠΆΠ΅, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ для понимания областСй видимости Π² JavaScript.

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

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° β€” это Ρ‚ΠΎΡ‚, Π² Ρ…ΠΎΠ΄Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выполняСтся присвоСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΠΎ врСмя этого ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° выполняСтся Π²Ρ‹Π·ΠΎΠ² bar() Π² строкС 12.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ объявлСниС bar ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ этот Π²Ρ‹Π·ΠΎΠ², Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ½ это, начиная с выполнСния поиска Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости. Π’ Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ являСтся глобальная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. Благодаря ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ компиляции, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ объявлСниС bar находится Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части ΠΊΠΎΠ΄Π°, поэтому ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Π΅Π³ΠΎ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

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

Π—Π°Ρ‚Π΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” это шаблон проСктирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ доступ ΠΊ Π½ΠΈΠΌ ΠΈΠ· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… областСй видимости. Надо ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ я ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ избСгаю использования этого ΠΏΡ€ΠΈΡ‘ΠΌΠ°, примСняя Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π±Π΅Π· Π½Π΅Π³ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ я ΡƒΠ²Π΅Ρ€Π΅Π½ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ использованиС ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈΠΌΡ‘Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π΅ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. ИспользованиС затСнСния способно привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ хранится Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΉ Π½Π° самом Π΄Π΅Π»Π΅ Π΅ΡΡ‚ΡŒ.

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

Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, рассматривая Π»Π΅ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ области видимости. Π­Ρ‚Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈ Π΅Ρ‘ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ β€” Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ функциями, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

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

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

Блочная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ, Π½ΠΎ ΠΎΠ½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Π° Π±Π»ΠΎΠΊΠΎΠΌ ΠΊΠΎΠ΄Π°.

НСмСдлСнно исполняСмыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ выраТСния

IIFE β€” это вСсьма популярный шаблон проСктирования JavaScript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π±Π»ΠΎΡ‡Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. IIFE β€” это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ выраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ исполняСм сразу послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ IIFE:

IIFE, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, Ссли Π²Ρ‹ выполняСтС Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ состояниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² области видимости IIFE. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ повСдСния:

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊ Ρ‚ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠ°ΠΊ истСчёт 1000 миллисСкунд, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° for Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΈ счётчик i окаТСтся Ρ€Π°Π²Π½Ρ‹ΠΌ 5.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π» Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ оТидаСтся, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ» ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ чисСл ΠΎΡ‚ 0 Π΄ΠΎ 4, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ IIFE для сохранСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π½Π°ΠΌ области видимости:

Π˜Ρ‚ΠΎΠ³ΠΈ

ΠœΡ‹ рассмотрСли Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ области видимости Π² JavaScript, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎΠ± ΠΈΡ… особСнностях, описали Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ простыС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования. На самом Π΄Π΅Π»Π΅, ΠΎΠ± областях видимости Π² JavaScript ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ‰Ρ‘ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, ΠΎΠ΄Π½Π°ΠΊΠΎ я полагаю, Ρ‡Ρ‚ΠΎ этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π΄Π°Ρ‘Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΡƒΡŽ Π±Π°Π·Ρƒ, воспользовавшись ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ, Π²Ρ‹ смоТСтС ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ваши знания.

НадСюсь, этот рассказ ΠΏΠΎΠΌΠΎΠ³ Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ области видимости Π² JavaScript, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ качСство Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ для прочтСния эту ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π½Π° Π₯Π°Π±Ρ€Π΅.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ JS-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ! ΠŸΡ€ΠΎΡΠΈΠΌ вас ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ интСрСсными ΠΏΡ€ΠΈΡ‘ΠΌΠ°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с областями видимости Π² JavaScript.

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

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

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