ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС

Как ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ js Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° сайтС?

ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, курсовых ΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ здСсь.

Как ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° сайтС?
Π”ΠΎΠ±Ρ€Ρ‹ΠΉ дСнь, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΎΠΊ ctrl+c ΠΈ ΠΏΡ€Π°Π²ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ.

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π΅ΠšΠ°ΠΊ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π° сайтС?
ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΡƒΠ΅Ρ‚ вопрос ΠΊΠ°ΠΊ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π° сайтС? ΠΠ°ΠΆΠ°Ρ‚ΡŒ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ.

Как ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сайтС Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒ сайта?
ЗдравствуйтС! ΠŸΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅, поТалуйста, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сайтС Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚.

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π΅ΠšΠ°ΠΊΠΈΠ΅ Ρ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ while(*str++)?
#include using namespace std; int strLength(const char* str)< int size=1; while.

Если имССтся Π² Π²ΠΈΠ΄Ρƒ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ скрипта, Ρ‚ΠΎ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΡΡŽΡΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ

Если имССтся Π² Π²ΠΈΠ΄Ρƒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΡˆΡŒ DevTools Π² Ρ…Ρ€ΠΎΠΌΠ΅ (F12), Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΡˆΡŒ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Source ΠΈ наТимаСшь Π½Π° Π·Π½Π°Ρ‡ΠΎΠΊ ΠΏΠ°ΡƒΠ·Ρ‹ (Pause script execution)

ΠŸΡ€ΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ курсора Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ссылки ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΈΡ… значСния

Если ΠΆΠ΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ функция Π½Π΅ выполняСтся ΠΈ скрипт ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΏΠ°ΡƒΠ·Ρ‹ Π½Π΅ останавливаСтся, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:
ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΡˆΡŒ Π² этом ΠΆΠ΅ DevTools Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Elements, ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, элСмСнтС body, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΡˆΡŒ Brake on->Subtree modifications
И Ρ‚ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ остановится ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° страницы

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

JavaScript | Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс элСмСнта Π² массивС?

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ массив ΠΈΠ· строк, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Ρ‹, Π° Π½Π΅ числа. Π’Π°ΠΊ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ. ВсСго 10 элСмСнтов Π² массивС.

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π΅Π”Π΅ΡΡΡ‚ΡŒ строк Π² массивС β€” JavaScript

Как ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠ°ΠΊΠΈΠΌ индСксом находится элСмСнт Π² массивС?

Π’ этом Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Array β€” findIndex(). Он провСряСт элСмСнты массива ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ. Если Β« условиС выполняСтся Β«(true) ΠΈ элСмСнт находится Π² массивС, Ρ‚ΠΎΠ³Π΄Π° возвращаСтся Π΅Π³ΠΎ индСкс (Ρ†Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число ΠΈΠ»ΠΈ 0). Если Β« условиС НЕ выполняСтся Β«(false) ΠΈ элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² массивС, Ρ‚ΠΎΠ³Π΄Π° возвращаСтся Β«-1Β».

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Π² массивС Π±ΡƒΠ΄Π΅Ρ‚ нСсколько ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… элСмСнтов, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ findIndex() достанСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самый ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ….

И Π΅Ρ‰Ρ‘, ΠΌΠ΅Ρ‚ΠΎΠ΄ findIndex() создаёт Π½ΠΎΠ²Ρ‹ΠΉ массив ΠΈ Π½Π΅ измСняСт Ρ‚ΠΎΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ вызываСтся. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ для сохранности Π΄Π°Π½Π½Ρ‹Ρ….

РСшаСм вопрос

ΠŸΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс элСмСнта, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«zxΒ»

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

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π΅ΠœΠ΅Ρ‚ΠΎΠ΄ findIndex Π²Π΅Ρ€Π½ΡƒΠ» индСксы β€” JavaScript

ΠŸΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π² массивС

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π΅ΠœΠ΅Ρ‚ΠΎΠ΄ findIndex Π½Π΅ Π½Π°ΡˆΡ‘Π» элСмСнты ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ β€” JavaScript

Если Π² массивС нСсколько ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ?

Π”ΠΎΠ±Π°Π²ΠΈΠΌ нСсколько ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… элСмСнтов Π² массив:

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС12 строк Π² массивС β€” JavaScript

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π΅Π’ΠΎΠ»ΡŒΠΊΠΎ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ совпадСния β€” JavaScript

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ссылки

findIndex() β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Array

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

JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ: ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚? ΠžΡ‚ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π΄ΠΎ промисов β€” (ΠΏΠΎΡ‡Ρ‚ΠΈ) всё, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС

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

Начнём нашС ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ Π² язык с экскурсии Π² ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΡ€ JavaScript-Π΄Π²ΠΈΠΆΠΊΠΎΠ².

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ консоль Π² Chrome ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Sources. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ нСсколько Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых интСрСсных называСтся Call Stack (Π² Firefox Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Call Stack, ΠΊΠΎΠ³Π΄Π° поставитС Π±Ρ€Π΅ΠΉΠΊΠΏΠΎΠΈΠ½Ρ‚ Π² ΠΊΠΎΠ΄Π΅):

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Call Stack? ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‚ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Π³ΠΎ происходит, Π΄Π°ΠΆΠ΅ Ρ€Π°Π΄ΠΈ исполнСния ΠΏΠ°Ρ€Ρ‹ строк ΠΊΠΎΠ΄Π°. На самом Π΄Π΅Π»Π΅ JavaScript Π½Π΅ поставляСтся Π² ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ΅ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ. БущСствуСт большой ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ наш JavaScript-ΠΊΠΎΠ΄ β€” это JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ. Π‘Π°ΠΌΡ‹ΠΌΠΈ популярными ΡΠ²Π»ΡΡŽΡ‚ΡΡ V8, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Google Chrome ΠΈ Node.js, SpiderMonkey Π² Firefox, JavaScriptCore Π² Safari/WebKit.

БСгодня JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой прСкрасныС ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±ΠΎ всСх аспСктах. Однако ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ исполнСнию ΠΊΠΎΠ΄Π° Π΄Π΅Π»Π°ΡŽΡ‚ для нас лишь нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π΄Π²ΠΈΠΆΠΊΠΎΠ²: Call Stack (стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²), Global Memory (глобальная ΠΏΠ°ΠΌΡΡ‚ΡŒ) ΠΈ Execution Context (контСкст исполнСния). Π“ΠΎΡ‚ΠΎΠ²Ρ‹ с Π½ΠΈΠΌΠΈ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ?

1. JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ ΠΈ глобальная ΠΏΠ°ΠΌΡΡ‚ΡŒ

Π― Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ JavaScript являСтся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языком. Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π΅Ρ€ΡŒΡ‚Π΅, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π΅Ρ‚, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ ваш ΠΊΠΎΠ΄ Π·Π° микросСкунды Π΄ΠΎ Π΅Π³ΠΎ исполнСния.

Π’ΠΎΠ»ΡˆΠ΅Π±ΡΡ‚Π²ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ, Π΄Π°? Π­Ρ‚ΠΎ Π²ΠΎΠ»ΡˆΠ΅Π±ΡΡ‚Π²ΠΎ называСтся JIT (Just in time compilation). Она сама ΠΏΠΎ сСбС являСтся большой Ρ‚Π΅ΠΌΠΎΠΉ для обсуТдСния, Π΄Π°ΠΆΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°Π»ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ JIT. Но ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ ΠΌΡ‹ пропустим Ρ‚Π΅ΠΎΡ€ΠΈΡŽ ΠΈ сосрСдоточимся Π½Π° Ρ„Π°Π·Π΅ исполнСния, которая Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ интСрСсна.

Для Π½Π°Ρ‡Π°Π»Π° посмотритС Π½Π° этот ΠΊΠΎΠ΄:

Допустим, я ΡΠΏΡ€ΠΎΡˆΡƒ вас, ΠΊΠ°ΠΊ этот ΠΊΠΎΠ΄ обрабатываСтся Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅? Π§Ρ‚ΠΎ Π²Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚Π΅? Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ: Β«Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠ΄Β» ΠΈΠ»ΠΈ Β«Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ исполняСт ΠΊΠΎΠ΄Β». Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ всё Π½Π΅ Ρ‚Π°ΠΊ просто. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΠΎΠ΄ считываСт Π½Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, Π° Π΄Π²ΠΈΠΆΠΎΠΊ. JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ считываСт ΠΊΠΎΠ΄, ΠΈ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ опрСдСляСт ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку, Ρ‚ΠΎ ΠΊΠ»Π°Π΄Ρ‘Ρ‚ ΠΏΠ°Ρ€Ρƒ ссылок Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ (ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΡƒΡ‡Π΅ΠΉ (heap)) β€” это ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. И ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄, Ρ‚ΠΎ Π² глобальной памяти появятся Π΄Π²Π° Π±ΠΈΠ½Π΄ΠΈΠ½Π³Π°:

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС

Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ исполняСтся. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚? А ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ интСрСсноС. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ Π΄Π²Π° Ρ€Π°Π·Π΄Π΅Π»Π°:

2. JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ: ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚? Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст исполнСния ΠΈ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

Π’Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Они ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ (ΠΊΡƒΡ‡Ρƒ).

Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ исполняСм JavaScript-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ± этом ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ? Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ JavaScript-Π΄Π²ΠΈΠΆΠΊΠ° Π΅ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

Π­Ρ‚ΠΎ стСковая структура Π΄Π°Π½Π½Ρ‹Ρ…: элСмСнты ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ Π² Π½Π΅Ρ‘ свСрху, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΈΠ· структуры, ΠΏΠΎΠΊΠ° Π½Π°Π΄ Π½ΠΈΠΌΠΈ Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты. ИмСнно Ρ‚Π°ΠΊ устроСны JavaScript-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈ исполнСнии ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠΈΠ½ΡƒΡ‚ΡŒ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ссли Π² Π½Ρ‘ΠΌ присутствуСт другая функция. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π½Π° это Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эта концСпция ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Β«JavaScript являСтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌΒ».

Но вСрнёмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ отправляСт Π΅Ρ‘ Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²:

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС

МнС нравится ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ стопки чипсов Pringles. ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡŠΠ΅ΡΡ‚ΡŒ чипс снизу стопки, ΠΏΠΎΠΊΠ° Π½Π΅ съСдим Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π»Π΅ΠΆΠ°Ρ‚ свСрху. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, наша функция являСтся синхронной: это всСго лишь ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ быстро вычисляСтся.

Π’ Ρ‚ΠΎ ΠΆΠ΅ самоС врСмя Π΄Π²ΠΈΠΆΠΎΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² памяти Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст исполнСния, это глобальная срСда, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ исполняСтся JavaScript-ΠΊΠΎΠ΄. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит:

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст исполнСния Π² Π²ΠΈΠ΄Π΅ моря, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ JavaScript-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ»Π°Π²Π°ΡŽΡ‚, словно Ρ€Ρ‹Π±Ρ‹. Как ΠΌΠΈΠ»ΠΎ! Но это лишь ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° всСй истории. Π§Ρ‚ΠΎ, Ссли наша функция ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?

Π”Π°ΠΆΠ΅ Π² простом случаС, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ создаёт Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ контСкст исполнСния:

Рядом с pow появится Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ контСкст исполнСния, Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·Π΅Π»Ρ‘Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°-ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, располоТСнного Π²Π½ΡƒΡ‚Ρ€ΠΈ глобального контСкста исполнСния. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ создаёт Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ контСксты исполнСния. ВсС эти Ρ€Π°Π·Π΄Π΅Π»Ρ‹-ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ быстро! Как ΠΌΠ°Ρ‚Ρ€Ρ‘ΡˆΠΊΠ°!

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ вСрнёмся ΠΊ истории с ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ. Π§Ρ‚ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚?

3. JavaScript являСтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π±Π°Π²Π½Ρ‹Π΅ истории

ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ JavaScript являСтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ наши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ лишь ΠΎΠ΄ΠΈΠ½ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Напомню, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠΈΠ½ΡƒΡ‚ΡŒ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ссли исполнСния ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π­Ρ‚ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ссли ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с синхронным ΠΊΠΎΠ΄ΠΎΠΌ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, слоТСниС Π΄Π²ΡƒΡ… чисСл являСтся синхронным ΠΈ вычисляСтся Π·Π° микросСкунды. А Ρ‡Ρ‚ΠΎ насчёт сСтСвых Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… взаимодСйствий с внСшним ΠΌΠΈΡ€ΠΎΠΌ?

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ спроСктированы Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ асинхронно. Π”Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Ρ€Π°Π·, Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ внСшнСй ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ β€” Π² нашСм случаС это Π±Ρ€Π°ΡƒΠ·Π΅Ρ€. Об этом ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½ΠΈΠΆΠ΅.

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ JavaScript-ΠΊΠΎΠ΄, Π΄Π²ΠΈΠΆΠΎΠΊ считываСт этот ΠΊΠΎΠ΄ строка Π·Π° строкой ΠΈ выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

4. Асинхронный JavaScript, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ Ρ†ΠΈΠΊΠ» событий

Благодаря глобальной памяти, контСксту исполнСния ΠΈ стСку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² синхронный JavaScript-ΠΊΠΎΠ΄ исполняСтся Π² Π½Π°ΡˆΠΈΡ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…. Но ΠΌΡ‹ ΠΊΠΎΠ΅ ΠΎ Ρ‡Ρ‘ΠΌ Π·Π°Π±Ρ‹Π»ΠΈ. Π§Ρ‚ΠΎ происходит, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ?

Под асинхронной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ я ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ взаимодСйствиС с внСшним ΠΌΠΈΡ€ΠΎΠΌ, для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя. Π’Ρ‹Π·ΠΎΠ² REST API ΠΈΠ»ΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° β€” асинхронны, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π° ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΉΡ‚ΠΈ сСкунды. Благодаря ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΡΡ Π² Π΄Π²ΠΈΠΆΠΊΠ΅ элСмСнтам ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· блокирования стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π°Ρ функция ΠΌΠΎΠΆΠ΅Ρ‚ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ Β«ΡƒΠΌΠ½Ρ‹Β», ΠΈ с нСбольшой ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ.

Когда ΠΌΡ‹ исполняСм Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π±Π΅Ρ€Ρ‘Ρ‚ Π΅Ρ‘ ΠΈ выполняСт для нас. Π’ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€:

Π§Π΅Ρ€Π΅Π· 10 сСкунд Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π±Π΅Ρ€Ρ‘Ρ‚ callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ, ΠΈ ΠΊΠ»Π°Π΄Ρ‘Ρ‚ Π΅Ρ‘ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² JavaScript-Π΄Π²ΠΈΠΆΠΊΠ΅ появилось Π΅Ρ‰Ρ‘ Π΄Π²Π° Ρ€Π°Π·Π΄Π΅Π»Π°-ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° этот ΠΊΠΎΠ΄:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наша схСма выглядит Ρ‚Π°ΠΊ:

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС

setTimeout исполняСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ контСкста Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. Π§Π΅Ρ€Π΅Π· 10 сСкунд Ρ‚Π°ΠΉΠΌΠ΅Ρ€ запускаСтся ΠΈ callback-функция Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ исполнСнию. Но для Π½Π°Ρ‡Π°Π»Π° ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π­Ρ‚ΠΎ структура Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΈ, ΠΊΠ°ΠΊ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ Π΅Ρ‘ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, прСдставляСт собой ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

КаТдая асинхронная функция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Но ΠΊΡ‚ΠΎ отправляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ дальшС? Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Ρ†ΠΈΠΊΠ» событий.

Пока Ρ‡Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» событий занимаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ: провСряСт, пуст Π»ΠΈ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Если Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π΅ΡΡ‚ΡŒ какая-Π½ΠΈΠ±ΡƒΠ΄ΡŒ функция ΠΈ Ссли стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² свободСн, Ρ‚ΠΎΠ³Π΄Π° ΠΏΠΎΡ€Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ callback Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

ПослС этого функция считаСтся исполнСнной. Π’Π°ΠΊ выглядит общая схСма ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ асинхронного ΠΈ синхронного ΠΊΠΎΠ΄Π° JavaScript-Π΄Π²ΠΈΠΆΠΊΠΎΠΌ:

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅: Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹Π΅ API, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ Ρ†ΠΈΠΊΠ» событий ΡΠ²Π»ΡΡŽΡ‚ΡΡ столпами асинхронного JavaScript.

И Ссли интСрСсно, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ Β«What the heck is the event loop anywayΒ» Π€ΠΈΠ»ΠΈΠΏΠ° РобСртса. Π­Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… объяснСний Ρ†ΠΈΠΊΠ»Π° событий.

Но ΠΌΡ‹ Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ с Ρ‚Π΅ΠΌΠΎΠΉ асинхронного JavaScript. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ… ΠΌΡ‹ рассмотрим ES6-промисы.

5. Callback hell ΠΈ ES6-промисы

Callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² JavaScript Π²Π΅Π·Π΄Π΅, ΠΈ Π² синхронном, ΠΈ Π² асинхронном ΠΊΠΎΠ΄Π΅. Рассмотрим этот ΠΌΠ΅Ρ‚ΠΎΠ΄:

Π’Π΅Ρ€ΠΌΠΈΠ½ Callback hell Π² JavaScript ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ ΠΊ Β«ΡΡ‚ΠΈΠ»ΡŽΒ» программирования, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ callback’и Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ callback’и, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ callback’и… Из-Π·Π° асинхронной ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ JavaScript-программисты ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² эту Π»ΠΎΠ²ΡƒΡˆΠΊΡƒ.

Если чСстно, я Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ создавал большиС ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρ‹ callback’ов. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я Ρ†Π΅Π½ΡŽ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ всСгда ΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ². Если Π²Ρ‹ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² callback hell, это Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ваша функция Π΄Π΅Π»Π°Π΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ.

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ callback hell, Ссли Π²Π°ΠΌ интСрСсно, Ρ‚ΠΎ сходитС Π½Π° сайт callbackhell.com, Ρ‚Π°ΠΌ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ исслСдована ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. А ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ES6-промисах. Π­Ρ‚ΠΎ Π°Π΄Π΄ΠΎΠ½ ΠΊ JavaScript, ΠΏΡ€ΠΈΠ·Π²Π°Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π°Π΄Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Но Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «промисы»?

ΠŸΡ€ΠΎΠΌΠΈΡ Π² JavaScript β€” это прСдставлСниС Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ события. ΠŸΡ€ΠΎΠΌΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΈΠ»ΠΈ Π½Π° ΠΆΠ°Ρ€Π³ΠΎΠ½Π΅ программистов промис Π±ΡƒΠ΄Π΅Ρ‚ Β«Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Β» (resolved, исполнСн). Но Ссли промис Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ошибкой, Ρ‚ΠΎ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π² состоянии Β«ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Β» (rejected). Π’Π°ΠΊΠΆΠ΅ Ρƒ промисов Π΅ΡΡ‚ΡŒ состояниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ промис начинаСтся Π² состоянии «оТидания Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΒ» (pending). МоТно Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный промис? Π”Π°. Об этом ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅.

6. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с JavaScript-промисами

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, resolve β€” это функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ промис ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ. А reject создаст ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½Ρ‹ΠΉ промис:

БСйчас промисы Π½Π΅ выглядят Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ, Π²Π΅Ρ€Π½ΠΎ? Π­Ρ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ выводят для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ. И Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅, ΠΎΡ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½Ρ‹Π΅ промисы ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. НапримСр:

Как JavaScript-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ Ρ‡ΡƒΠΆΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²Ρ‹ ΠΏΠΎ большСй части взаимодСйствуСтС с внСшними промисами. Π‘ΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Ρ‡Π°Ρ‰Π΅ всСго ΠΎΠ±Ρ‘Ρ€Ρ‚Ρ‹Π²Π°ΡŽΡ‚ legacy-ΠΊΠΎΠ΄ Π² конструктор промисов, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

И ΠΏΡ€ΠΈ нСобходимости ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ промис, Π²Ρ‹Π·Π²Π°Π² Promise.resolve() :

7. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π² ES6-промисах

ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки Π² JavaScript всСгда Π±Ρ‹Π»ΠΎ просто, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π² синхронном ΠΊΠΎΠ΄Π΅. ВзглянитС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, с промисами ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ асинхронныС ошибки, словно ΠΎΠ½ΠΈ синхронныС. Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π³Π»Π°Π²Π΅ я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² reject ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡŽ промиса:

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ для создания ΠΈ отклонСния промиса Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Promise.reject() :

8. ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρ‹ ES6-промисов: Promise.all, Promise.allSettled, Promise.any ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅

ΠŸΡ€ΠΎΠΌΠΈΡΡ‹ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ΅. Promise API ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ряд ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для комбинирования промисов. Один ΠΈΠ· самых ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… β€” Promise.all, ΠΎΠ½ Π±Π΅Ρ€Ρ‘Ρ‚ массив ΠΈΠ· промисов ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ промис. Волько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Promise.all отклоняСтся, Ссли ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ промис Π² массивС.

Promise.race Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΈΠ»ΠΈ отклоняСт, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· промисов Π² массивС ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ статус.

9. ES6-промисы ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡

Если ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Ρ‹, каТдая асинхронная callback-функция Π² JavaScript оказываСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Но Ρƒ callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π² промис, иная ΡΡƒΠ΄ΡŒΠ±Π°: ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ (Microtask Queue), Π° Π½Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ Π·Π°Π΄Π°Ρ‡.

И здСсь Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ: ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Ρ†ΠΈΠΊΠ» событий провСряСт, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π»ΠΈ Π½ΠΎΠ²Ρ‹Π΅ callback’и ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ эта ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ° описана Π”ΠΆΠ΅ΠΉΠΊΠΎΠΌ ΠΡ€Ρ‡ΠΈΠ±Π°Π»ΡŒΠ΄ΠΎΠΌ Π² Tasks, microtasks, queues and schedules, Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ‡Ρ‚ΠΈΠ²ΠΎ.

10. JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ: ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚? Асинхронная ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡ: ΠΎΡ‚ промисов Π΄ΠΎ async/await

async/await β€” всСго лишь стилистичСскоС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ синтаксичСским сахаром. async/await Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ мСняСт JavaScript (Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, язык Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ совмСстим со старыми Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΎΠΌΠ°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄). Π­Ρ‚ΠΎ лишь Π½ΠΎΠ²Ρ‹ΠΉ способ написания асинхронного ΠΊΠΎΠ΄Π° Π½Π° основС промисов. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΡƒΠΆΠ΅ сохранили промис Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ then :

Выглядит Π·Π΄Ρ€Π°Π²ΠΎ, Π²Π΅Ρ€Π½ΠΎ? Π—Π°Π±Π°Π²Π½ΠΎ, Ρ‡Ρ‚ΠΎ async-функция всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ промис, ΠΈ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΅ΠΉ Π² этом ΠΏΠΎΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ:

Π”Π°Π²Π°ΠΉΡ‚Π΅ снова взглянСм Π½Π° промис, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ошибки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° catch :

Π‘ асинхронными функциями ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Однако Π΅Ρ‰Ρ‘ Π½Π΅ всС ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° этот ΡΡ‚ΠΈΠ»ΡŒ. try/catch ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ ваш ΠΊΠΎΠ΄. ΠŸΡ€ΠΈ этом Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ Π² этом ΠΊΠΎΠ΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try :

Помимо этого async/await выглядит Π»ΡƒΡ‡ΡˆΠΈΠΌ способом структурирования асинхронного ΠΊΠΎΠ΄Π° Π² JavaScript. ΠœΡ‹ Π»ΡƒΡ‡ΡˆΠ΅ управляСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ошибок ΠΈ ΠΊΠΎΠ΄ выглядит Ρ‡ΠΈΡ‰Π΅.

11. JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ: ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚? Π˜Ρ‚ΠΎΠ³ΠΈ

JavaScript β€” это скриптовый язык для Π²Π΅Π±Π°, ΠΎΠ½ сначала компилируСтся, Π° Π·Π°Ρ‚Π΅ΠΌ интСрпрСтируСтся Π΄Π²ΠΈΠΆΠΊΠΎΠΌ. Π‘Π°ΠΌΡ‹Π΅ популярныС JS-Π΄Π²ΠΈΠΆΠΊΠΈ: V8, примСняСтся Π² Google Chrome ΠΈ Node.js; SpiderMonkey, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для Firefox; JavaScriptCore, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Safari.

JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ «двиТущихся» частСй: стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², глобальная ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ†ΠΈΠΊΠ» событий, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². ВсС эти части идСально Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ вмСстС, обСспСчивая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ синхронного ΠΈ асинхронного ΠΊΠΎΠ΄Π°.

JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ для исполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ примСняСтся СдинствСнный стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π»Π΅ΠΆΠΈΡ‚ Π² основС асинхронной ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ JavaScript: всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, для выполнСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ внСшнСй ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ) ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

Для упрощСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ асинхронного ΠΊΠΎΠ΄Π° Π² ECMAScript 2015 Π±Ρ‹Π»ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½Ρ‹ промисы. ΠŸΡ€ΠΎΠΌΠΈΡ β€” это асинхронный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для прСдставлСния ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ»ΠΈ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ любой асинхронной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Но ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π½Π° этом Π½Π΅ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΈΡΡŒ. Π’ 2017-ΠΌ появились async/await : стилистичСскоС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ для промисов, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ асинхронный ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» синхронным.

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

Π Π°Π±ΠΎΡ‚Π° с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΈ свойствами элСмСнтов Π² JavaScript

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ познакомимся DOM-свойствами ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ, рассмотрим, Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΊΠ°ΠΊΠΈΠ΅ Π² JavaScript Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ.

Π§Π΅ΠΌ отличаСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΎΡ‚ DOM-свойства

Атрибуты β€” это HTML-сущности, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊ элСмСнтам Π² HTML-ΠΊΠΎΠ΄Π΅.

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ этим свойствам Π² ΠΊΠΎΠ΄Π΅ JavaScript выполняСтся ΠΊΠ°ΠΊ ΠΊ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ здСсь выступаСт ΡƒΠ·Π΅Π» (элСмСнт) DOM.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ значСния DOM-свойств для элСмСнта, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅, ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ ΠΈΡ… значСния Π² консоль:

Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ нюанс связан с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ HTML-Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π² исходном ΠΊΠΎΠ΄Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π² DOM-свойства Π½Π΅ всСгда осущСствляСтся ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ.

ΠšΡ€ΠΎΠΌΠ΅ этого, JavaScript позволяСт Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ. Для этого Π² DOM API ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Но ΠΈΡ… ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ.

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

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ отличия ΠΌΠ΅ΠΆΠ΄Ρƒ DOM-свойствами ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ:

Π Π°Π±ΠΎΡ‚Π° с DOM-свойствами элСмСнта

Π Π°Π±ΠΎΡ‚Π° со свойствами элСмСнтов Π² JavaScript ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Π²Ρ‹ΡˆΠ΅ осущСствляСтся ΠΊΠ°ΠΊ со свойствами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π’ качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ HTML-элСмСнт:

На Π±Π°Π·Π΅ Π½Π΅Π³ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΊΠ°ΠΊ осущСствляСтся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ DOM-свойств, ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ….

Π§Ρ‚Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ DOM-свойств:

ИзмСнСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ DOM-свойств:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π² консоль всС значСния классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Ρƒ элСмСнтов p Π½Π° страницС:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ установим всСм элСмСнтам с классом content свойство lang со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ «ru»:

Атрибуты элСмСнтов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ

Атрибуты ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² HTML-ΠΊΠΎΠ΄Π΅. Они Ρ…ΠΎΡ‚ΡŒ ΠΈ связаны, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, со свойствами, Π½ΠΎ это Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв слСдуСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ со свойствами, Π° ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ.

ЗначСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ DOM-свойств, ΠΊΠ°ΠΊ это ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Π²Ρ‹ΡˆΠ΅ всСгда являСтся строкой.

Π’ JavaScript для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, связанных с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ, имССтся Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ value

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° value ΠΈ DOM-свойства value :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π΅ΠΌ дСйствия, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ DOM-свойства ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ измСнится Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°:

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ всСгда с DOM-свойствами, Π° ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΎΡ‡Π΅Π½ΡŒ интСрСсный ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ href.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ href

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ссылки Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ установлСно Π² HTML.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ находится Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅, Ρ‚ΠΎ Π±Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getAttribute Π² этом случаС Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ selected

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ select :

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ значСния ΠΎΠΏΡ†ΠΈΠΉ Π² элСмСнтС select :

Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ (свойство attributes)

Π”Π°Π½Π½Ρ‹ΠΉ способ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ элСмСнта.

НапримСр, Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π² консоль всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта:

ΠšΡ€ΠΎΠΌΠ΅ этого, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ посрСдством ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² :

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ getNamedItem, setNamedItem ΠΈ removeNamedItem:

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

Поиск элСмСнтов Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² JavaScript

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ js выполняСтся Π² элСмСнтС

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΊΠ°ΠΊΠΈΠ΅ Π² JavaScript ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Π²Ρ‹Π±ΠΎΡ€Π° элСмСнтов Π½Π° страницС, ΠΈ ΠΊΠ°ΠΊ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ JavaScript для Π²Ρ‹Π±ΠΎΡ€Π° DOM элСмСнтов

Π Π°Π±ΠΎΡ‚Π° со страницСй Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ связана с ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ DOM элСмСнтами. Но ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… сначала Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ.

Π˜Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ сводится Π² Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΈ количСства Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… DOM элСмСнтов. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ( querySelectorAll ) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ элСмСнты, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ( querySelector ) – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ….

querySelectorAll – поиск элСмСнтов ΠΏΠΎ CSS сСлСктору

querySelectorAll – примСняСтся, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ всС элСмСнты ΠΏΠΎ CSS сСлСктору Π²Π½ΡƒΡ‚Ρ€ΠΈ страницы ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ элСмСнта.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ css_selector – это строка, содСрТащая CSS сСлСктор, Π² соотвСтствии с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ поиск элСмСнтов.

Π£Π·Π½Π°Ρ‚ΡŒ количСство элСмСнтов Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойства length :

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ элСмСнту Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ Π΅Π³ΠΎ индСксу. Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с 0.

ΠŸΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… элСмСнтов ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for:

ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ элСмСнтов посрСдством Ρ†ΠΈΠΊΠ»Π° for. of:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

1. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ сущСствованиС элСмСнтов с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ data-toggle=»modal» :

querySelector – Π²Ρ‹Π±ΠΎΡ€ элСмСнта ΠΏΠΎ CSS сСлСктору

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ selector – это строка, содСрТащая CSS сСлСктор, Π² соотвСтствии с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ элСмСнт.

Π’ качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ querySelector Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Element ΠΈΠ»ΠΈ null (Ссли элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

2. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск элСмСнта ΠΏΠΎ классу nav :

3. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ элСмСнту

, находящСмуся Π² Ρ‚Π΅Π³Π΅

4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ элСмСнта с классом modal Π½Π° страницС:

Β«Π‘Ρ‚Π°Ρ€Ρ‹Π΅Β» ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Π²Ρ‹Π±ΠΎΡ€Π° элСмСнтов

К Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ относятся ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСйчас практичСски Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для поиска элСмСнтов. Π˜Ρ… Π² основном ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² «старом» ΠΊΠΎΠ΄Π΅.

getElementById – ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ элСмСнта ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ id

Указания значСния id Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ рСгистра, Ρ‚.ΠΊ., Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, main ΠΈ Main – это Ρ€Π°Π·Π½Ρ‹Π΅ значСния.

НапримСр, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ элСмСнт, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π² качСствС id Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ pagetitle :

ДСйствиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getElementById ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ querySelector :

getElementsByClassName – ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка элСмСнтов ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ классов

ΠœΠ΅Ρ‚ΠΎΠ΄ getElementsByClassName позволяСт ΠΈΡΠΊΠ°Ρ‚ΡŒ элСмСнты Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ класса, Π½ΠΎ ΠΈ ΠΏΠΎ нСскольким, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρƒ элСмСнта.

НапримСр, Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ элСмСнты Π½Π° страницС Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ классы btn ΠΈ btn-danger :

Ѐункция getElementsByClassName позволяСт ΠΈΡΠΊΠ°Ρ‚ΡŒ элСмСнты Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ всСго Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π½ΠΎ ΠΈ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ элСмСнтС.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ querySelectorAll ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивно:

getElementsByTagName – ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ элСмСнтов ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ‚Π΅Π³Π°

ΠœΠ΅Ρ‚ΠΎΠ΄ getElementsByTagName ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для получСния ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ элСмСнтов ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ‚Π΅Π³Π°.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‡Π΅Ρ€Π΅Π· querySelectorAll ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

getElementsByName – ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ элСмСнтов ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° name

ΠœΠ΅Ρ‚ΠΎΠ΄ getElementsByName ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ элСмСнты, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

НапримСр, Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всС элСмСнты Π½Π° страницС с name=»phone» :

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ это с querySelectorAll ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

getElementsBy* ΠΈ ΠΆΠΈΠ²Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ элСмСнты li находящиСся Π² #list ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ ΠΈΡ… количСство Π² консоль. Π—Π°Ρ‚Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· 5 сСкунд ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ элСмСнт li Π² #list ΠΈ Π΅Ρ‰Ρ‘ Ρ€Π°Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΠΌ ΠΈΡ… количСство Π² консоль.

Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, эта коллСкция элСмСнтов являСтся ΠΆΠΈΠ²ΠΎΠΉ, Ρ‚.Π΅. ΠΎΠ½Π° автоматичСски измСняСтся. Π‘Π½Π°Ρ‡Π°Π»Π° Π² Π½Π΅ΠΉ Π±Ρ‹Π»ΠΎ 2 элСмСнта, Π° послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π½Π° страницу Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ подходящий элСмСнт, Π² Π½Π΅ΠΉ ΠΈΡ… стало 3.

Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ количСство элСмСнтов Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ измСнилось.

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ элСмСнтов послС измСнСния DOM, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ querySelectorAll Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ Ρ€Π°Π·.

Π˜Ρ‚ΠΎΠ³ΠΎ

Π’ JavaScript ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ 6 основных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Π²Ρ‹Π±ΠΎΡ€Π° элСмСнтов Π½Π° страницС.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

matches – ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° соотвСтствиС элСмСнта CSS сСлСктору

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° большим количСством Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΠΈΡ„ΠΈΠ»Π»:

closest – поиск блиТайшСго ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΏΠΎ CSS сСлСктору

closest – это ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π½Π°ΠΉΡ‚ΠΈ блиТайшСго ΠΏΡ€Π΅Π΄ΠΊΠ° для элСмСнта Π² соотвСтствии с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ сСлСктором. ΠŸΡ€ΠΈ этом поиск ΠΏΡ€Π΅Π΄ΠΊΠΎΠ² начинаСтся с самого элСмСнта, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся ΠΈ Ссли ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π΅ΠΌΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ closest Π²Π΅Ρ€Π½Ρ‘Ρ‚ сам этот элСмСнт.

Π’ качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ closest Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ DOM-элСмСнт ΠΈΠ»ΠΈ null (Ссли ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт Π½Π°ΠΉΠ΄Π΅Π½ Π½Π΅ Π±Ρ‹Π»).

contains – ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ

contains – это ΠΌΠ΅Ρ‚ΠΎΠ΄, посрСдством ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сущСствованиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

Π—Π°Π΄Π°Ρ‡ΠΈ

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ страница. Π’ Π½Π΅ΠΉ слСдуСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ:

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

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

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