Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ выполнСния ΠΈ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² JavaScript | by Nikita | WebbDEV

Published in

Β·

7 min read

Β·

Nov 14, 2018

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

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ выполнСния (execution context) β€” это, Ссли Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎ, концСпция, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ производится Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° JavaScript. Код всСгда выполняСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ контСкста.

Π’ JavaScript сущСствуСт Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° контСкстов выполнСния:

  • Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст выполнСния. Π­Ρ‚ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ контСкст выполнСния. Если Π½Π΅ΠΊΠΈΠΉ ΠΊΠΎΠ΄ находится Π½Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π½Π°Ρ‡ΠΈΡ‚ этот ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΌΡƒ контСксту. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст характСризуСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ глобального ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ, Π² случаС с Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ, являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ window, ΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово thisΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° этот Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ лишь ΠΎΠ΄ΠΈΠ½ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст.
  • ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° вызываСтся функция, для Π½Π΅Ρ‘ создаётся Π½ΠΎΠ²Ρ‹ΠΉ контСкст. КаТдая функция ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный контСкст выполнСния. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ мноТСство контСкстов выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ контСкста выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½ΠΈΠΆΠ΅.
  • ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ eval. Код, выполняСмый Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ eval, Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный контСкст выполнСния. Однако Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ eval ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ, поэтому здСсь ΠΌΡ‹ ΠΎΠ± этом контСкстС выполнСния Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ.

Π‘Ρ‚Π΅ΠΊ выполнСния (execution stack), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Ρ‰Ρ‘ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ стСком Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (call stack), это LIFO-стСк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния контСкстов выполнСния, создаваСмых Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ΄Π°.

Когда JS-Π΄Π²ΠΈΠΆΠΎΠΊ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ скрипт, Π΄Π²ΠΈΠΆΠΎΠΊ создаёт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст выполнСния ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ стСк. ΠŸΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ создаёт Π½ΠΎΠ²Ρ‹ΠΉ контСкст выполнСния для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ стСка.

Π”Π²ΠΈΠΆΠΎΠΊ выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, контСкст выполнСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части стСка. Когда Ρ€Π°Π±ΠΎΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Π΅Ρ‘ контСкст извлСкаСтся ΠΈΠ· стСка ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаётся Ρ‚ΠΎΠΌΡƒ контСксту, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ элСмСнтС стСка.

Π˜Π·ΡƒΡ‡ΠΈΠΌ эту идСю с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этого ΠΊΠΎΠ΄Π°.

БостояниС стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

Когда Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ загруТаСтся Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ создаёт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст выполнСния ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ first() Π΄Π²ΠΈΠΆΠΎΠΊ создаёт для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΠΎΠ²Ρ‹ΠΉ контСкст ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ стСка.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ second() ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ first() для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ создаётся Π½ΠΎΠ²Ρ‹ΠΉ контСкст выполнСния ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ помСщаСтся Π² стСк. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ функция second() Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π΅Ρ‘ контСкст извлСкаСтся ΠΈΠ· стСка ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаётся контСксту выполнСния, находящСмуся Π² стСкС ΠΏΠΎΠ΄ Π½ΠΈΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, контСксту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ first().

Когда функция first() Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π΅Ρ‘ контСкст извлСкаСтся ΠΈΠ· стСка ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаётся Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΌΡƒ контСксту. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ вСсь ΠΊΠΎΠ΄ оказываСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌ, Π΄Π²ΠΈΠΆΠΎΠΊ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст выполнСния ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ стСка.

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ JS-Π΄Π²ΠΈΠΆΠΎΠΊ управляСт контСкстами выполнСния. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ контСксты выполнСния ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ, ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ происходит послС создания. Π’ частности, Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ стадии создания контСкста выполнСния ΠΈ ΠΎ стадии выполнСния ΠΊΠΎΠ΄Π°.

Бтадия создания контСкста выполнСния

ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ JavaScript-ΠΊΠΎΠ΄Π° создаётся контСкст выполнСния. Π’ процСссС Π΅Π³ΠΎ создания Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ дСйствия:

  1. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this ΠΈ осущСствляСтся привязка this (this binding).
  2. Боздаётся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ LexicalEnvironment (лСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅).
  3. Боздаётся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ VariableEnvironment (ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…).

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ контСкст выполнСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ° this

Π’ глобальном контСкстС выполнСния this содСрТит ссылку Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ window).

Π’ контСкстС выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π° функция. Если ΠΎΠ½Π° Π²Ρ‹Π·Π²Π°Π½Π° Π² Π²ΠΈΠ΄Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this привязано ΠΊ этому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях this привязываСтся ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΈΠ»ΠΈ устанавливаСтся Π² undefined (Π² строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅). Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ЛСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅

Π’ соотвСтствии со спСцификациСй ES6, лСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ (Lexical Environment) β€” это Ρ‚Π΅Ρ€ΠΌΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ функциями Π½Π° основС структуры лСксичСской влоТСнности ECMAScript-ΠΊΠΎΠ΄Π°. ЛСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ· записи окруТСния (Environment Record) ΠΈ ссылки Π½Π° внСшнСС лСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null.

ΠŸΡ€ΠΎΡ‰Π΅ говоря, лСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ β€” это структура, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ свСдСния ΠΎ соотвСтствии ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Под Β«ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌΒ» здСсь понимаСтся имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° ΠΏΠΎΠ΄ Β«ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉΒ» β€” ссылка Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π² Ρ‚ΠΎΠΌ числС β€” Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ) ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ лСксичСском ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ имССтся Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

  1. Π—Π°ΠΏΠΈΡΡŒ окруТСния. Π­Ρ‚ΠΎ мСсто, Π³Π΄Π΅ хранятся объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
  2. Бсылка Π½Π° внСшнСС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. НаличиС Ρ‚Π°ΠΊΠΎΠΉ ссылки Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ лСксичСского окруТСния Π΅ΡΡ‚ΡŒ доступ ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ лСксичСскому ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ (области видимости).

БущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° лСксичСских ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ:

  1. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст выполнСния) β€” это лСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ внСшнСго окруТСния. Бсылка глобального окруТСния Π½Π° внСшнСС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ прСдставлСна Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ null. Π’ глобальном ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ (Π² записи окруТСния) доступны встроСнныС сущности языка (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ Object, Array, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны с Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‚Π°ΠΌ ΠΆΠ΅ находятся ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this Π² этом ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
  2. ΠžΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ, Π² записи окруТСния, хранятся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Бсылка Π½Π° внСшнСС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚Π°ΠΊ ΠΈ Π½Π° внСшнюю ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΊ рассматриваСмой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

БущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° записСй окруТСния:

  1. ДСкларативная запись окруТСния, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.
  2. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ запись окруТСния, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния свСдСний ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ функциях Π² глобальном контСкстС.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π² глобальном ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ запись окруТСния прСдставлСна ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ записью окруТСния, Π° Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ записью окруТСния.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ дСкларативная запись окруТСния, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ arguments, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ соотвСтствия ΠΌΠ΅ΠΆΠ΄Ρƒ индСксами ΠΈ значСниями Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ свСдСния ΠΎ количСствС Ρ‚Π°ΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

ЛСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ псСвдокода:

ΠžΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ΠžΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (Variable Environment) β€” это Ρ‚ΠΎΠΆΠ΅ лСксичСскоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, запись окруТСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ привязки, созданныС посрСдством ΠΊΠΎΠΌΠ°Π½Π΄ объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (VariableStatement) Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ контСкстС выполнСния.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ являСтся лСксичСским ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΎΠ½ΠΎ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ всСми Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹ΠΌΠΈ свойствами лСксичСского окруТСния.

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

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ обсудили:

Π‘Ρ…Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС контСкста выполнСния для этого ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Как Π²Ρ‹, вСроятно, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ константы, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов let ΠΈ const, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ связанных с Π½ΠΈΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова var, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ undefined.

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя создания контСкста Π² ΠΊΠΎΠ΄Π΅ осущСствляСтся поиск объявлСний ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€ΠΈ этом объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ хранятся Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. ЗначСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈ использовании var, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² undefined, Π° ΠΏΡ€ΠΈ использовании let ΠΈΠ»ΠΈ constΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ.

ИмСнно поэтому ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ var, Π΄ΠΎ ΠΈΡ… объявлСния (хотя ΠΎΠ½ΠΈ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ undefined), Π½ΠΎ, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ доступа ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ константам, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ let ΠΈ const, выполняСмой Π΄ΠΎ ΠΈΡ… объявлСния, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка.

Π’ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ описали, называСтся «поднятиСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…Β» (Hoisting). ОбъявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Β«ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡΒ» Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡ… лСксичСской области видимости Π΄ΠΎ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ присвоСния ΠΈΠΌ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Бтадия выполнСния ΠΊΠΎΠ΄Π°

Π­Ρ‚ΠΎ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, самая простая Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°. На этой стадии выполняСтся присвоСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ осущСствляСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ссли Π² процСссС выполнСния ΠΊΠΎΠ΄Π° JS-Π΄Π²ΠΈΠΆΠΎΠΊ Π½Π΅ смоТСт Π½Π°ΠΉΡ‚ΠΈ Π² мСстС объявлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, объявлСнной с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова let, ΠΎΠ½ присвоит этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ undefined.

Волько Ρ‡Ρ‚ΠΎ ΠΌΡ‹ обсудили Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ выполнСния JavaScript-ΠΊΠΎΠ΄Π°. Π₯отя для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ JS-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, Π·Π½Π°Ρ‚ΡŒ всё это ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Ρƒ вас имССтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈ Π³Π»ΡƒΠ±ΠΆΠ΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ языка, с Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ поднятиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, области видимости, замыкания.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ Understanding Execution Context and Execution Stack in Javascript

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ — Visual Studio (Windows)

  • Π‘Ρ‚Π°Ρ‚ΡŒΡ

ΠžΠ±Π»Π°ΡΡ‚ΡŒ примСнСния:Visual StudioVisual Studio для Mac Visual Studio Code

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΊΠ½Π° Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ находятся Π² стСкС. Π’ ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΠΎΠΊΠ°Π·Π°Π½ порядок Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для изучСния ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния прилоТСния.

Если символы ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ нСдоступны для части стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π² ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± этой части стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

ВмСсто Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ информация.

[Frames below may be incorrect and/or missing, no symbols loaded for name.dll]

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ описанных здСсь Π² зависимости ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΠ»ΠΈ выпуска. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² мСню БСрвис ΠΏΡƒΠ½ΠΊΡ‚ Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΈ экспорт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π‘ΠΌ. Ρ€Π°Π·Π΄Π΅Π» Бброс ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Окно Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ пСрспСктивС «ΠžΡ‚Π»Π°Π΄ΠΊΠ°» Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… срСдах Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Eclipse.

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅

Π’ΠΎ врСмя ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² мСню ΠžΡ‚Π»Π°Π΄ΠΊΠ° Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Окна > Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΠ»ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ клавиши ctrl+alt+C.

Π‘Ρ‚Ρ€Π΅Π»ΠΊΠ° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°Π΄Ρ€ стСка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ находится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ выполнСния. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это ΠΊΠ°Π΄Ρ€ стСка, свСдСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² ΠΎΠΊΠ½Π°Ρ…: исходного ΠΊΠΎΠ΄Π°, Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅, ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ значСния, Π’ΠΈΠ΄ΠΈΠΌΡ‹Π΅ ΠΈ ДизассСмблированный ΠΊΠΎΠ΄. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ контСкст ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°Π΄Ρ€ стСка, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°Π΄Ρ€ стСка.

ЖСлтая стрСлка ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠ°Π΄Ρ€ стСка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ выполнСния. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это ΠΊΠ°Π΄Ρ€ стСка, свСдСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² ΠΎΠΊΠ½Π°Ρ…: исходного ΠΊΠΎΠ΄Π°, Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅, ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ значСния, Π’ΠΈΠ΄ΠΈΠΌΡ‹Π΅ ΠΈ ДизассСмблированный ΠΊΠΎΠ΄. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ контСкст ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°Π΄Ρ€ стСка, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°Π΄Ρ€ стСка.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π΄Ρ€Ρ‹ стСка ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π²ΠΎ врСмя ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π²ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ слуТбС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΎΠΊΠ½Π΅ «Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²»

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ внСшний ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠ΄, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ элСмСнт ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ внСшний ΠΊΠΎΠ΄ Π² ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ внСшний ΠΊΠΎΠ΄.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ внСшний ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠ΄, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ внСшний ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΠ»ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΎΠΊΠ½ΠΎ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ внСшний ΠΊΠΎΠ΄.

ΠΠ΅ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠ΄Β β€” это любой ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ отобраТаСтся ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° Волько ΠΌΠΎΠΉ ΠΊΠΎΠ΄. Π’ управляСмом ΠΊΠΎΠ΄Π΅ ΠΊΠ°Π΄Ρ€Ρ‹ Π½Π΅ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° скрыты ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ВмСсто ΠΊΠ°Π΄Ρ€ΠΎΠ² Π½Π΅ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° отобраТаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ запись.

[<External Code>]

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°Π΄Ρ€ стСка (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ контСкста ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°)

  1. Π’ ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΊΠ°Π΄Ρ€ стСка, ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ.

    Или ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΊΠ°Π΄Ρ€ Π² ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° этот ΠΊΠ°Π΄Ρ€.

  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΊΠ°Π΄Ρ€Ρƒ.

    Рядом с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°Π΄Ρ€ΠΎΠΌ стСка появится зСлСная стрСлка с Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ†ΠΎΠΌ. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ выполнСния остаСтся Π² исходном ΠΊΠ°Π΄Ρ€Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ ΠΆΠ΅Π»Ρ‚ΠΎΠΉ стрСлкой. ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π¨Π°Π³ ΠΈΠ»ΠΈ ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π² мСню ΠžΡ‚Π»Π°Π΄ΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ продолТится с исходного, Π° Π½Π΅ с Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π΄Ρ€Π°.

НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС связанныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² ΠΎΠΊΠ½Π΅ ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ стСк.

Поиск стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°Π΄Ρ€Ρ‹ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ввСдя ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ условия поиска Π² ΠΏΠΎΠ»Π΅ поиска, располоТСнном Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ ΠΎΠΊΠ½Π° стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π‘ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°Π΄Ρ€Ρ‹ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ исходного ΠΊΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

Π’ ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, исходный ΠΊΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ К исходному ΠΊΠΎΠ΄Ρƒ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· ΠΎΠΊΠ½Π° «Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²»

Π’ ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π΅Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄ΠΎ курсора.

Установка Ρ‚ΠΎΡ‡ΠΊΠΈ останова Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π‘ΠΌ. Ρ€Π°Π·Π΄Π΅Π» Установка Ρ‚ΠΎΡ‡ΠΊΠΈ останова Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ»ΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π² ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ трассировка стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

Π’ VisualΒ StudioΒ Enterprise (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° для стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π²ΠΎ врСмя ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

Π’ ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ контСкстноС мСню. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ ΠΊΠΎΠ΄Π° (CTRL + SHIFT + ` ).

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅.

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ дизассСмблированного ΠΊΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (C#, C++, VisualΒ Basic, F#)

Π’ ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, дизассСмблированный ΠΊΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ К дизассСмблированному ΠΊΠΎΠ΄Ρƒ.

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π² ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ установитС ΠΈΠ»ΠΈ снимитС Ρ„Π»Π°ΠΆΠΎΠΊ ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ <Π½ΡƒΠΆΠ½Ρ‹Π΅ свСдСния> .

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° символов для модуля (C#, C++, VisualΒ Basic, F#)

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

Π‘ΠΌ. ΡΡ‚Π°Ρ‚ΡŒΡŽ Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² символов (.pdb) ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² с исходным ΠΊΠΎΠ΄ΠΎΠΌ Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ Visual Studio.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ символы

  1. Π’ ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠ°Π΄Ρ€ стСка, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ символы. ΠšΠ°Π΄Ρ€ затСняСтся.

  2. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ символы, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π‘Π΅Ρ€Π²Π΅Ρ€Ρ‹ символов (ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚) (Ссли доступно) ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ ΠΊ символам.

Установка ΠΏΡƒΡ‚ΠΈ ΠΊ символам

  1. Π’ ΠΎΠΊΠ½Π΅ Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ символов ΠΈΠ· контСкстного мСню.

    ΠŸΠΎΡΠ²ΠΈΡ‚ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ Π½Π° страницС Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹.

  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅

    ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ символов.

  3. Π’ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡ΠΎΠΊ «ΠŸΠ°ΠΏΠΊΠ°».

    Π’ ΠΏΠΎΠ»Π΅ ΠœΠ΅ΡΡ‚Π° размСщСния Ρ„Π°ΠΉΠ»ΠΎΠ² символов (.pdb) появится курсор.

  4. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ с символами Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ производится ΠΎΡ‚Π»Π°Π΄ΠΊΠ°. ΠŸΡ€ΠΈ локальной ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ это ΠΏΡƒΡ‚ΡŒ Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.

  5. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ OK, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

  • Π‘ΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠΊΠ½Π΅ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²
  • ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅
  • Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² символов (PDB) ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² с исходным ΠΊΠΎΠ΄ΠΎΠΌ
  • ИспользованиС Ρ‚ΠΎΡ‡Π΅ΠΊ останова

Π‘Ρ‚Π΅ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² JavaScript: Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π― Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌ со стСками… Π±Π»ΠΈΠ½ΠΎΠ² β€” ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌΠΈ стСками, высокими стСками, всСми стСками. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±Π»ΠΈΠ½Ρ‹ β€” это, СстСствСнно, ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΡƒΠΌ, ΠΊΠΎΠ³Π΄Π° я ΡΠ»Ρ‹ΡˆΡƒ слово «стопка». К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, это подходящая Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Π° для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ стСка.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСк?

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ стСки β€” это Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ массиву, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ элСмСнтов. Π’ этом Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΈΠ½ прСдставляСт собой ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка; ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свСрху. Из-Π·Π° этой Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ структуры стСки Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ LIFOβ€Š ΠΈΠ»ΠΈ послСдним ΠΏΡ€ΠΈΡˆΠ΅Π», ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅Π».

Π‘Ρ‚Π΅ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π΄Π²Π΅ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: Π²Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅. Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с массивами, Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ приятно ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ β€” ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅: Push добавляСт элСмСнт Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка, Π° pop удаляСт ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ послСдний Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ элСмСнт. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ массива (ΠΈΠ»ΠΈ стопки Π±Π»ΠΈΠ½ΠΎΠ²), Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнту снизу ΠΈΠ»ΠΈ посСрСдинС, Π½Π΅ ΡƒΠ΄Π°Π»ΠΈΠ² сначала Ρ‚Π΅, Ρ‡Ρ‚ΠΎ находятся свСрху.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² JS?

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² JavaScript являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ структуры Π΄Π°Π½Π½Ρ‹Ρ… стСка. Π’ стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² JS элСмСнтами ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΠ½Π° добавляСтся Π² стСк. Если Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ влоТСнная функция, эта влоТСнная функция Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ​​на Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΊΠ°ΠΊ ΠΎ своСго Ρ€ΠΎΠ΄Π° спискС Π΄Π΅Π» для JavaScript.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΡ ΠΎΡ‚ JuliaCreate ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ React ΠΈ TypeScript β€” ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство

Β 

Π‘Ρ‚Π΅ΠΊΠΈ ΠΈ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² JS

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² JavaScript являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ структуры Π΄Π°Π½Π½Ρ‹Ρ… стСка. Π’ стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² JS элСмСнтами ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΠ½Π° добавляСтся Π² стСк. Если Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ влоТСнная функция, эта влоТСнная функция Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ​​на Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΊΠ°ΠΊ ΠΎ своСго Ρ€ΠΎΠ΄Π° спискС Π΄Π΅Π» для JavasScript.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ JavaScript Π² основном прСдставляСт собой ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ процСсс, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ JavaScript ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π·Π° Ρ€Π°Π·. АсинхронныС дСйствия ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, ΠΈ я Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ это Π²ΠΈΠ΄Π΅ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎΠ± этом большС.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ скриптС, Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка Π² порядкС Π²Ρ‹Π·ΠΎΠ²Π°, JavaScript Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² порядкС свСрху Π²Π½ΠΈΠ·, извлСкая ΠΈΡ… ΠΈΠ· стСка.

Π’ этом Π²ΠΈΠ΄Π΅ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция printSquare вызываСтся Π²Π½ΠΈΠ·Ρƒ экрана. Ѐункция printSquare добавляСтся Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π½ΠΎ ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π°, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ своСй Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Square . ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½Π°Ρ функция Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ​​в стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π½ΠΎ ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π°, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ своСй Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ , Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ , ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π½Π° . Ѐункция ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ помСщаСтся Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка, ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ сразу ΠΆΠ΅, ΠΎΠ½Π° продолТаСтся, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈ выталкиваСтся ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка. Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² продолТаСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, извлСкая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π²Ρ‹Π·Π²Π°Π½Ρ‹.

Π Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ Π±Ρ‹Π»Π° Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ управлСния ΠΌΠΎΠΈΠΌ собствСнным стСком Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Когда я Π½Π°Ρ‡ΠΈΠ½Π°Π» ΠΎΠ΄Π½ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ исслСдований, ΠΎΠ½ΠΎ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π»ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΌΠΎΠ΅Π³ΠΎ собствСнного списка Π΄Π΅Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ; Π²ΠΎ врСмя исслСдования этого Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ вопроса я наткнулся Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² Π½Π°Ρ‡Π°Π»ΠΎ своСго списка, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, нСсколько Ρ€Π°Π·. РСшСниС самого послСднСго вопроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Π΄ΠΎΠ±Π°Π²ΠΈΠ», ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΌΠ½Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части списка ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ вопросом Π²Π½ΠΈΠ·Ρƒ, ΠΏΠΎΠΊΠ° я Π½Π΅ Π²Π΅Ρ€Π½ΡƒΡΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ этот Π±Π»ΠΎΠ³!

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ большС ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² встроСнного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСнияЧто Ρ‚Π°ΠΊΠΎΠ΅ символ @ Π² Python ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Β 

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ со стСками

Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ Chrome ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΡƒΡŽ панСль инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Одна ΠΈΠ· Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с панСлью, β€” это ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ строка Π·Π° строкой ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ помСщаСтся Π² стСк. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ (ΠΈΠ»ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Cmd + option + j ) Π½Π° любой Π²Π΅Π±-страницС Π² Chrome, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Β» ΠΈ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Β«Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈΒ» Π²Π²Π΅Ρ€Ρ…Ρƒ. Π― сдСлал нСбольшоС Π²ΠΈΠ΄Π΅ΠΎ с дСмонстрациСй Π²Ρ‹Π·ΠΎΠ²Π° стСка с использованиСм инструмСнтов Ρ‚ΠΎΡ‡ΠΊΠΈ останова ΠΈ пошагового выполнСния.

Π― добавляю Ρ‚ΠΎΡ‡ΠΊΡƒ останова ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ aDayInTheLife , которая приостанавливаСт ΠΊΠΎΠ΄ ΠΈ позволяСт Π½Π°ΠΌ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΊΠ°ΡΠΊΠ°Π΄Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² стСк снизу Π²Π²Π΅Ρ€Ρ…, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ свСрху Π²Π½ΠΈΠ· ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ свои Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, строка Β«Π‘Π΄Π΅Π»Π°Π» ΡˆΠΈΠ½Ρƒ Ρ€ΠΎΠ²Π½ΠΎΠΉ Π·Π° сСкунды» пСрСдаСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ aDayInTheLife ΠΈ возвращаСтся Π² консоль Π² самом ΠΊΠΎΠ½Ρ†Π΅ послС очистки стСка.

ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка.

НСвозмоТно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ JavaScript. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ это Π²ΠΈΠ΄Π΅ΠΎ Π½Π° сайтС www.youtube.com ΠΈΠ»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ JavaScript, Ссли ΠΎΠ½ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² вашСм Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² JavaScript, объяснСниС

Β 

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка?

Основная прСдпосылка Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Π°, ΠΈ Ссли Π² стСк помСщаСтся большС элСмСнтов, Ρ‡Π΅ΠΌ Π΅ΡΡ‚ΡŒ свободного мСста, стСк пСрСполняСтся. НаиболСС распространСнной ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ситуации пСрСполнСния стСка являСтся бСсконСчная ΠΈΠ»ΠΈ ΠΎΡ‡Π΅Π½ΡŒ глубокая рСкурсия. РСкурсивная функция β€” это функция, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сама сСбя β€” ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. ΠŸΠ΅Ρ€Π²Π°Ρ функция добавляСт Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², вторая функция добавляСт ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ возвращаСтся ΠΈ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ, стСк пСрСполнится.

Π”Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ стСка.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, инструмСнт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Chrome ΠΈΠΌΠ΅Π΅Ρ‚ для этого ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ послС 16 000 ΠΊΠ°Π΄Ρ€ΠΎΠ² (элСмСнтов стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²).

The Beatles ΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ΡΡ Π½Π°Π²ΡΠ΅Π³Π΄Π°β€Š β€” ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π½Π΅ трСбуСтся.


Π― ΠΎΡΡ‚Π°Π²Π»ΡŽ вас с Π·Π°Π±Π°Π²Π½Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΠΌ: Stack Overflowβ€Š, Π²Π΅Π±-ΡΠ°ΠΉΡ‚β€Š,β€Š ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» своС Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ опроса Coding Horror 2008 Π³ΠΎΠ΄Π°, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ создатСлями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ искали ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ своСго Π²Π΅Π±-сайта. Π‘Ρ€Π΅Π΄ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π±Ρ‹Π»ΠΈ humbledeveloper.com ΠΈ writeoncereadmany.com. 25 ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² ΠΈΠ· ΠΏΠΎΡ‡Ρ‚ΠΈ 7000 голосов Π΄ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ stackoverflow.com, Ρ‡Ρ‚ΠΎ сдСлало Π΅Π³ΠΎ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΌ, ΠΈ я, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠΉ.

Π˜Ρ‚Π°ΠΊ… ΠΊΡ‚ΠΎ Π³ΠΎΠ»ΠΎΠ΄Π΅Π½?

ОбъяснСниС стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² JavaScript.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π²Ρ‹Π·ΠΎΠ² JavaScript… | Π­Π»Π»Π΅Π½ ΠŸΠ°Ρ€ΠΊ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ†ΠΈΠΊΠ» событий ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ событий Π² JavaScript КСлли Π‘ΠΎΡ€ΠΊ Π½Π° Unsplash

Π—Π²ΠΎΠ½ΠΎΠΊ stack β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ JavaScript Π² Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅) отслСТиваСт своС мСсто Π² сцСнарии, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ β€” какая функция выполняСтся Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ· этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚. Π΄. — Π’Π΅Π±-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ MDN

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² отслСТиваСт выполняСмыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Когда ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΠ½Π° добавляСтся, ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Когда функция возвращаСтся, ΠΎΠ½Π° удаляСтся, ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π›ΡŽΠ±Ρ‹Π΅ асинхронныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (

fetch , setTimeout , async ΠΈ Ρ‚. Π΄.) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ событий (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом ΠΏΠΎΠ·ΠΆΠ΅).

Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² своСй консоли, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка.

На ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ Π²ΠΈΠ΄Π½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (a, b, c) ΠΈ врСмя возникновСния ошибки.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ, Ρ‡Ρ‚ΠΎ JavaScript являСтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π° Ρ€Π°Π·. Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² слСдуСт ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ LIFO (послСдний вошСл, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ обслуТСн), Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ всСгда Π±ΡƒΠ΄Π΅Ρ‚ сначала ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½Π° добавляСтся Π² стСк. Когда функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Ρ‰Π΅ , ΠΎΠ½Π° добавляСтся ΠΏΠΎΠ²Π΅Ρ€Ρ… Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Учитывая ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ:

  1. Π‘Π½Π°Ρ‡Π°Π»Π° вызываСтся sayHi , Π° добавляСт Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ( sayHi Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½).
  2. sayHi Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ sayBye ΠΈ добавляСт sayBye Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (ΠΎΠ±Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всС Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹).
  3. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ состояниС стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² настоящСС врСмя:

4.

sayBye Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ находится Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Он Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° консоль «Пока». Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ удаляСтся ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

5. Π’Π΅ΠΏΠ΅Ρ€ΡŒ sayHi находится Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Он Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚Β» Π½Π° консоль, Π° Π·Π°Ρ‚Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ пуст.

6. ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄:

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

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ событий β€” это мСсто, Π³Π΄Π΅ асинхронный ΠΊΠΎΠ΄ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ выполнСния. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ событий слСдуСт ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ FIFO (ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΡˆΠ΅Π», ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ обслуТСн), Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ событий Π½Π°Ρ‡Π½Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² пуст. Если стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΡƒΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ΄, Ρ†ΠΈΠΊΠ» событий Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ событий. Π¦ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий Π½Π΅ возобновится, ΠΏΠΎΠΊΠ° стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡ΠΈΡ‰Π΅Π½.

ВзглянитС Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

Как ΠΈ оТидалось, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π² консоль Β«fooΒ» . Π—Π°Ρ‚Π΅ΠΌ, Ρ‡Π΅Ρ€Π΅Π· 1 сСкунду, ΠΎΠ½ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π±Π°Ρ€ΠΎΠ² .

Как насчСт ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄Π°?

Π—Π΄Π΅ΡΡŒ setTimeout устанавливаСтся Π½Π° 0 . Из-Π·Π° этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ bar() выполнится Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ Β«barΒ» Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ Π΄ΠΎ Β«fooΒ» . Но это Π½Π΅ Ρ‚Π°ΠΊ. Оба Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ:

Π₯отя

setTimeout ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 , ΠΎΠ½ всС Ρ€Π°Π²Π½ΠΎ пСрСнаправляСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ событий. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‡ΠΈΡ‰Π΅Π½.