Π¦ΠΈΠΊΠ» js: Π¦ΠΈΠΊΠ»Ρ‹ while ΠΈ for

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

for — JavaScript | MDN

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Β for создаёт Ρ†ΠΈΠΊΠ», состоящий ΠΈΠ· 3 Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках, Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ с запятой.

for ([инициализация]; [условиС]; [Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅])Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
инициализация
Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Β (Π² Ρ‚ΠΎΠΌ числС выраТСния присвоСния) ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ счётчик. Π­Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова var. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²ΠΈΠ΄ΠΈΠΌΡ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ†ΠΈΠΊΠ»Π΅, Ρ‚.Π΅. Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области области видимости, Ρ‡Ρ‚ΠΎ ΠΈ Ρ†ΠΈΠΊΠ»Β for. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого выраТСния отбрасываСтся.
условиС
Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π΅ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°. Если Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ истинно, Ρ†ΠΈΠΊΠ» выполняСтся. УсловиС нС являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Если Π΅Π³ΠΎ Π½Π΅Ρ‚, условиС всСгда считаСтся истиной. Если Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Β Π»ΠΎΠΆΠ½ΠΎ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒΒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π·Π°Β for.
Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π΅ΡΡΒ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°.Β ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ выполнСния условия. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обновлСния ΠΈΠ»ΠΈ увСличСния пСрСмСнной счётчика.
Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполняСтся, ΠΊΠΎΠ³Π΄Π° условиС Ρ†ΠΈΠΊΠ»Π° истинно. Π§Ρ‚ΠΎΠ± Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ мноТСство Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅Β Π±Π»ΠΎΠΊ (en-US) ({ ... }) для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ этих Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ выраТСния Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ пустоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (;).

ИспользованиС 

for

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ»Β for начинаСтся объявлСниСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉΒ i ΠΈ задания Π΅ΠΉ значСния 0. Π—Π°Ρ‚Π΅ΠΌ провСряСт, Ρ‡Ρ‚ΠΎΒ i мСньшС дСвяти, выполняСт выраТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚Β iΒ Π½Π°Β 1 ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·.

for (var i = 0; i < 9; i++) {
   console.log(i);
   
}

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ выраТСния в Β 

for

ВсС 3 выраТСния Π² Ρ†ΠΈΠΊΠ»Π΅Β forΒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹.

НапримСр, Π² Π±Π»ΠΎΠΊΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

var i = 0;
for (; i < 9; i++) {
    console.log(i);
    
}

Как ΠΈ Π±Π»ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π±Π»ΠΎΠΊ условия нС обязатСлСн. Если пропуститС это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Ρ€Π²Ρ‘Ρ‚Π΅ Ρ†ΠΈΠΊΠ» Π³Π΄Π΅-Ρ‚ΠΎ Π² Ρ‚Π΅Π»Π΅, Π° Π½Π΅ создадитС бСсконСчный Ρ†ΠΈΠΊΠ».

for (var i = 0;; i++) {
   console.log(i);
   if (i > 3) break;
   
}

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ всС 3 Π±Π»ΠΎΠΊΠ°. Π‘Π½ΠΎΠ²Π° ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅Β break, Ρ‡Ρ‚ΠΎΠ± Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ», Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ счётчик, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ условиС для break Π±Ρ‹Π»ΠΎ истинно Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

var i = 0;

for (;;) {
  if (i > 3) break;
  console.log(i);
  i++;
}

ИспользованиС 

forΒ Π±Π΅Π· Π±Π»ΠΎΠΊΠ° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ»Β for вычисляСт смСщСниС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΡƒΠ·Π»Π° Π² сСкции [Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅], ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования выраТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ° (en-US),Β ΠΏΡƒΡΡ‚ΠΎΠ΅Β Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Β ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСсто этого.

function showOffsetPos (sId) {
  var nLeft = 0, nTop = 0;

  for (var oItNode = document.getElementById(sId); 
       oItNode; 
       nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent) 
        ;

  console.log("Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ элСмСнта \"" + sId + "\":\n left: " + nLeft + "px;\n top: " + nTop + "px;");
}



showOffsetPos("content");




Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:Β Π’ этом случаС, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ условиС Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, Ρ‚ΠΎΡ‡ΠΊΠ° с запятой ставится сразу послС выраТСния Ρ†ΠΈΠΊΠ»Π°.

BCD tables only load in the browser

JavaScript Π¦ΠΈΠΊΠ» For. Π£Ρ€ΠΎΠΊΠΈ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. W3Schools Π½Π° русском


Π¦ΠΈΠΊΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° нСсколько Ρ€Π°Π·.


JavaScript Π¦ΠΈΠΊΠ»Ρ‹

Π¦ΠΈΠΊΠ»Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Ρ‹, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ снова ΠΈ снова, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Часто Ρ‚Π°ΠΊ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами:

ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ:

text += cars[0] + «<br>»;
text += cars[1] + «<br>»;
text += cars[2] + «<br>»;
text += cars[3] + «<br>»;

text += cars[4] + «<br>»;
text += cars[5] + «<br>»;

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

for (let i = 0; i < cars.length; i++) {
Β Β text += cars[i] + «<br>»;
}

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ сами Β»

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Ρ†ΠΈΠΊΠ»ΠΎΠ²

JavaScript ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Ρ†ΠΈΠΊΠ»ΠΎΠ²:

  • for — ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° нСсколько Ρ€Π°Π·
  • for/in — ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
  • for/of — ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ значСния ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
  • while — ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΊΠ° выполняСтся ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ условиС
  • do/while — Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΊΠ° выполняСтся ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ условиС

Π¦ΠΈΠΊΠ» For

Π¦ΠΈΠΊΠ» for ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

for (инструкция 1; инструкция 2; инструкция 3) {
Β  // Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½


}

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 1 выполняСтся (ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·) ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 2 опрСдСляСт условиС выполнСния Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 3 выполняСтся (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·) послС выполнСния Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°.

Из ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ:

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 1 устанавливаСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Ρ†ΠΈΠΊΠ»Π° (let i = 0).

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 2 опрСдСляСт условиС для запуска Ρ†ΠΈΠΊΠ»Π° (i Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ мСньшС Ρ‡Π΅ΠΌ 5).

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 3 ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (i++) ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° выполняСтся Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° Π² Ρ†ΠΈΠΊΠ»Π΅.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 1

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ 1 для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² Ρ†ΠΈΠΊΠ»Π΅ (let i = 0).

Π­Ρ‚ΠΎ Π½Π΅ всСгда Ρ‚Π°ΠΊ, JavaScript всё Ρ€Π°Π²Π½ΠΎ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 1 Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°.

Π’ инструкции 1 ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми):

И Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ 1 (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ваши значСния установлСны Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Ρ†ΠΈΠΊΠ»Π°):

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 2

Часто инструкция 2 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ†Π΅Π½ΠΊΠΈ состояния исходной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π­Ρ‚ΠΎ Π½Π΅ всСгда Ρ‚Π°ΠΊ, JavaScript всё Ρ€Π°Π²Π½ΠΎ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 2 Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°.

Если инструкция 2 Π²Π΅Ρ€Π½Ρ‘Ρ‚ true, Ρ†ΠΈΠΊΠ» начнСтся Π·Π°Π½ΠΎΠ²ΠΎ, Ссли ΠΎΠ½ Π²Π΅Ρ€Π½Ρ‘Ρ‚ false, Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ.

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


Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 3

Часто инструкция 3 ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π­Ρ‚ΠΎ Π½Π΅ всСгда Ρ‚Π°ΠΊ, JavaScript всё Ρ€Π°Π²Π½ΠΎ, Π° инструкция 3 Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ 3 ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ (i—), ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ (i = i + 15) ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ 3 Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚Π΅ свои значСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°):

ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия Ρ†ΠΈΠΊΠ»Π°

ИспользованиС var Π² Ρ†ΠΈΠΊΠ»Π΅:

ИспользованиС let Π² Ρ†ΠΈΠΊΠ»Π΅:

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с использованиСм var, пСрСмСнная, объявлСнная Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π½Π΅ Ρ†ΠΈΠΊΠ»Π°.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с использованиСм let, пСрСмСнная, объявлСнная Π² Ρ†ΠΈΠΊΠ»Π΅, Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π½Π΅ Ρ†ΠΈΠΊΠ»Π°.

When let ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i Π² Ρ†ΠΈΠΊΠ»Π΅, пСрСмСнная i Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°. .


Π¦ΠΈΠΊΠ»Ρ‹ For/Of ΠΈ For/In

Π¦ΠΈΠΊΠ» for/in ΠΈ Ρ†ΠΈΠΊΠ» for/of ΠΏΠΎΡΡΠ½ΡΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅.


Π¦ΠΈΠΊΠ»Ρ‹ While

Π¦ΠΈΠΊΠ»Ρ‹ while ΠΈ do/while ΠΏΠΎΡΡΠ½ΡΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ….



Π¦ΠΈΠΊΠ»Ρ‹ Π² JavaScript Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π’ этой части ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ° Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Ρ†ΠΈΠΊΠ»Ρ‹ Π² JavaScript, Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ†ΠΈΠΊΠ»Ρ‹ Π² JavaScript:

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

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ массива, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π°Π΄ΠΎ Π½Π°ΠΉΡ‚ΠΈ индСкс ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ значСния.

Π¦ΠΈΠΊΠ»Ρ‹ Π² JS:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ сами Ρ†ΠΈΠΊΠ»Ρ‹, всСго ΠΈΡ… Ρ‚Ρ€ΠΈ, while, do while ΠΈ for.

Π¦ΠΈΠΊΠ» while Π² JS:

Π”Π°Π²Π°ΠΉΡ‚Π΅ напишСм Π½Π΅ большой ΠΊΠΎΠ΄, для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

let i = 0; // Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ присваиваСм Π΅ΠΉ ноль

// ПишСм Ρ†ΠΈΠΊΠ» while

while (i < 10) {

Β Β Β Β console.log(i); // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² консоль ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i

Β Β Β Β i++; // Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i Π½Π° ΠΎΠ΄ΠΈΠ½

}

Код совсСм Π½Π΅ большой, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΌΡ‹ создаём ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i ΠΈ присваиваСм Π΅ΠΉ ноль, Π² условиС для Ρ†ΠΈΠΊΠ»Π° Ρƒ нас i < 10, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠΊΠ° i строга мСньшС 10.

Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² консоль Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i, Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строчки ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Ρ‘, Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΌ ΠΏΠ»ΠΎΡ…ΠΎ Π²ΠΈΠ΄Π½ΠΎ, Π½ΠΎ Π²Ρ‹Π²Π΅Π»ΠΎΡΡŒ ΠΎΡ‚ нуля, Π΄ΠΎ дСвяти.

Π¦ΠΈΠΊΠ» do while Π² JS:

Π“Π»Π°Π²Π½ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ do while, ΠΎΡ‚ while, Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° условия Ρ†ΠΈΠΊΠ»Π°, ΠΈΠ΄Ρ‘Ρ‚ послС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠ½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· пройдётся, Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

let i = 0; // Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ присваиваСм Π΅ΠΉ ноль

// ПишСм Ρ†ΠΈΠΊΠ» do while, Π² Π½Π°Ρ‡Π°Π»Π΅ всСгда пишСм do

do {

Β Β Β Β console.log(i); // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² консоль ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i

Β Β Β Β i++; // Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i Π½Π° ΠΎΠ΄ΠΈΠ½

} while (i < 10); // УсловиС ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ†ΠΈΠΊΠ»Π°

Π’ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄, Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠ°, я Π΅Π³ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ.

Π¦ΠΈΠΊΠ» for Π² JS:

Π­Ρ‚ΠΎ ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ самый популярный Ρ†ΠΈΠΊΠ» ΠΈΠ· всСх Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² JavaScript,Β  ΠΈ Π½Π° ΠΌΠΎΠΉ взгляд ΠΎΠ½ самый ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΈ простой.

// ПишСм Ρ†ΠΈΠΊΠ» for

for (let i = 0; i < 10; i++) {

Β Β Β Β console.log(i); // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² консоль ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i

}

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ этот ΠΊΠΎΠ΄, Π² Π½Π°Ρ‡Π°Π»Π΅ Π² скобках ΠΌΡ‹ объявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i, послС Ρ‚ΠΎΡ‡ΠΊΠΈ запятой пишСм условиС, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ», послСднСС, это ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π²Π½ΡƒΡ‚Ρ€ΠΈ самого Ρ†ΠΈΠΊΠ»Π° просто Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² консоль.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅ этот Ρ†ΠΈΠΊΠ», ΠΏΠΎ сути Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» while, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ½ ΠΊΡƒΠ΄Π° Ρ‡Π°ΡˆΠ΅.

Π’Π°ΠΊΠΆΠ΅ вмСсто ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΈΠ»ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ матСматичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

JavaScript Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°:

ПослСднСС Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, это Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ Π½Π°Ρ‡Π°Π»Π° Π½ΠΎΠ²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π΄Π΅Π»Π°Ρ‚ΡŒ это Π±ΡƒΠ΄Π΅ΠΌ благодаря Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ continue ΠΈ break.

Continue Π² JS:

Continue ΠΏΠΎ сути Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ†ΠΈΠΊΠ»Π° Π² самоС Π½Π°Ρ‡Π°Π»Π°, ΠΈ запускаСт Π½ΠΎΠ²ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ, Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

// ПишСм Ρ†ΠΈΠΊΠ» for

for (let i = 0; i < 10; i++) {

Β Β Β Β // УсловиС ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»ΠΎ

Β Β Β Β if (i == 2) {

Β Β Β Β Β Β Β Β // возвращаСмся Π² Π½Π°Ρ‡Π°Π»ΠΎ

Β Β Β Β Β Β Β Β continue;

Β Β Β Β }

Β Β Β Β console.log(i); // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² консоль ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i

}

Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» for, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π½ΠΎ Ρ‚ΡƒΡ‚ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ условиС ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»Π° Ρ†ΠΈΠΊΠ»Π° ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ, Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π»ΠΎΡΡŒ Π² консоль.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρƒ нас Π½Π΅Ρ‚ Π΄Π²ΠΎΠΉΠΊΠΈ, это всё ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ написали, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° i Ρ€Π°Π²Π½Π° 2, Ρ‚ΠΎ вСрнутся Π² Π½Π°Ρ‡Π°Π»Π° Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΏΡ€ΠΈ этом эта ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈΠ΄Ρ‘Ρ‚ Π΄ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Break Π² JS:

Break ΠΏΠΎΡ…ΠΎΠΆ Π½Π° continue, Π½ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ†ΠΈΠΊΠ»Π°, Π²ΠΎΡ‚ Π½Π΅ большой ΠΊΠΎΠ΄.

// ПишСм Ρ†ΠΈΠΊΠ» for

for (let i = 0; i < 10; i++) {

Β Β Β Β // УсловиС ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Π΅Ρ†

Β Β Β Β if (i == 2) {

Β Β Β Β Β Β Β Β // возвращаСмся Π² ΠΊΠΎΠ½Π΅Ρ†

Β Β Β Β Β Β Β Β break;

Β Β Β Β }

Β Β Β Β console.log(i); // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² консоль ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i

}

Π’ΡƒΡ‚ всё Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ continue, Π° break, Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π²Π΅Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° числа, Π΄Π²ΠΎΠΉΠΊΠ° ΠΈ всё Ρ‡Ρ‚ΠΎ послС Π΄Π²ΠΎΠΉΠΊΠΈ Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Ρ‹ΡˆΠ»ΠΈ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°, ΠΊΠΎΠ³Π΄Π° пСрСмСнная i стала Ρ€Π°Π²Π½Π° Π΄Π²ΡƒΠΌ.

Π’ΡƒΡ‚ стоит ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΌΠΎΠΉ взгляд особого смысла Π½Π΅Ρ‚ Π² break, я Π΄ΡƒΠΌΠ°ΡŽ Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ условия Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ†ΠΈΠΊΠ»Π°.

Π’Ρ‹Π²ΠΎΠ΄:

Π’ этой части ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ° Π²Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ†ΠΈΠΊΠ»Ρ‹ Π² JavaScript ΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Ρ‚ΡƒΡ‚ Π±Ρ‹Π»ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самоС Π²Π°ΠΆΠ½ΠΎΠ΅ Ρ‡Ρ‚ΠΎ стоит Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ Π½ΠΈΡ….Ρ†ΠΈΠΊΠ»Ρ‹ Π² javascript ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° соц-сСти:

ΠžΡ†Π΅Π½ΠΊΠ°:

(Пока ΠΎΡ†Π΅Π½ΠΎΠΊ Π½Π΅Ρ‚)

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°…

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡΡ:

Пока ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π½Π΅Ρ‚

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ:

БостояниС ΠΈΒ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» – React

На этой страницС прСдставлСны понятия «состояниС» (state) ΠΈΒ Β«ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»Β» (lifecycle) React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ справочник API ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² находится по этой ссылкС.

В качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ часы ΠΈΠ·Β ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°. Π’Β Π³Π»Π°Π²Π΅ Π Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ элСмСнтов ΠΌΡ‹Β Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ UI Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ способом — Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ReactDOM.render():

function tick() {
  const element = (
    <div>
      <h2>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!</h2>
      <h3>БСйчас {new Date().toLocaleTimeString()}.</h3>
    </div>
  );
  ReactDOM.render(    element,    document.getElementById('root')  );}

setInterval(tick, 1000);

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π°Β CodePen

В этой Π³Π»Π°Π²Π΅ ΠΌΡ‹Β ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ использованиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Clock. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ установит свой собствСнный Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΈΒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ Ρ€Π°Π· в сСкунду.

Для Π½Π°Ρ‡Π°Π»Π°, ΠΈΠ·Π²Π»Π΅Ρ‡Ρ‘ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ врСмя:

function Clock(props) {
  return (
    <div>      <h2>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!</h2>      <h3>БСйчас {props.date.toLocaleTimeString()}.</h3>    </div>  );
}

function tick() {
  ReactDOM.render(
    <Clock date={new Date()} />,    document.getElementById('root')
  );
}

setInterval(tick, 1000);

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π°Β CodePen

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Β Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Clock нС обновляСт сСбя ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду автоматичСски. Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒΒ Π±Ρ‹ ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ, Π²Π½ΡƒΡ‚Ρ€ΠΈ самого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Clock.

Π’Β ΠΈΠ΄Π΅Π°Π»Π΅ ΠΌΡ‹Β Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Clock Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ сам сСбя обновлял:

ReactDOM.render(
  <Clock />,  document.getElementById('root')
);

Для этого Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ «состояниС» (state) Π²Β ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Clock.

«БостояниС» ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π°Β ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ Π½Π°ΠΌ пропсы, ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π²Β Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ состояниС контролируСтся и доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° в классовый

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Clock

в классовый ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π·Π°Β 5 шагов:

  1. Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ES6-класс с таким ТС ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ React.Component в качСствС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса
  2. Π”ΠΎΠ±Π°Π²ΠΈΠΌ в класс пустой ΠΌΠ΅Ρ‚ΠΎΠ΄ render()
  3. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‘ΠΌ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Β ΠΌΠ΅Ρ‚ΠΎΠ΄ render()
  4. Π—Π°ΠΌΠ΅Π½ΠΈΠΌ props Π½Π°Β this.props Π²Β Ρ‚Π΅Π»Π΅ render()
  5. Π£Π΄Π°Π»ΠΈΠΌ ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π΅ΡΡ пустоС объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
class Clock extends React.Component {
  render() {
    return (
      <div>
        <h2>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!</h2>
        <h3>БСйчас {this.props.date.toLocaleTimeString()}.</h3>
      </div>
    );
  }
}

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π°Β CodePen

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Clock ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ ΠΊΠ°ΠΊ класс, а нС функция.

ΠœΠ΅Ρ‚ΠΎΠ΄ render Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° происходит ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹Β Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠΌ <Clock /> Π²Β ΠΎΠ΄ΠΈΠ½ ΠΈΒ Ρ‚ΠΎΡ‚Β ΠΆΠ΅ DOM-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΌΡ‹Β ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ СдинствСнный экзСмпляр класса

ClockΒ β€” поэтому ΠΌΡ‹Β ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС ΠΈΒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС в класс

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠΌ date из пропсов в состояниС Π²Β Ρ‚Ρ€ΠΈ этапа:

  1. Π—Π°ΠΌΠ΅Π½ΠΈΠΌ this.props.date Π½Π°Β this.state.date Π²Β ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ render():
class Clock extends React.Component {
  render() {
    return (
      <div>
        <h2>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!</h2>
        <h3>БСйчас {this.state.date.toLocaleTimeString()}.</h3>      </div>
    );
  }
}
  1. Π”ΠΎΠ±Π°Π²ΠΈΠΌ конструктор класса, Π²Β ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС Π²Β ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ this.state:
class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};  }

  render() {
    return (
      <div>
        <h2>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!</h2>
        <h3>БСйчас {this.state.date.toLocaleTimeString()}.</h3>
      </div>
    );
  }
}

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹Β ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ props Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ) конструктору:

  constructor(props) {
    super(props);    this.state = {date: new Date()};
  }

ΠšΠ»Π°ΡΡΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ конструктор с аргумСнтом props.

  1. Π£Π΄Π°Π»ΠΈΠΌ ΠΏΡ€ΠΎΠΏ date из элСмСнта <Clock />:
ReactDOM.render(
  <Clock />,  document.getElementById('root')
);

ПозТС ΠΌΡ‹Β Π²Π΅Ρ€Π½Ρ‘ΠΌ ΠΊΠΎΠ΄ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ и на этот Ρ€Π°Π· помСстим Π΅Π³ΠΎ в сам ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

class Clock extends React.Component {
  constructor(props) {    super(props);    this.state = {date: new Date()};  }
  render() {
    return (
      <div>
        <h2>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!</h2>
        <h3>БСйчас {this.state.date.toLocaleTimeString()}.</h3>      </div>
    );
  }
}

ReactDOM.render(
  <Clock />,  document.getElementById('root')
);

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π°Β CodePen

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ собствСнный Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ Clock ΠΈΒ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду.

Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° в класс

В прилоТСниях со мноТСством ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ систСмныС рСсурсы, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ.

ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π²Β DOM называСтся Β«ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β» (mounting). Нам Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° это происходит.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΊΠΎΠ³Π΄Π° DOM-ΡƒΠ·Π΅Π», созданный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ, удаляСтся, происходит Β«Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β» (unmounting). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ рСсурсов, ΠΌΡ‹Β Π±ΡƒΠ΄Π΅ΠΌ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Β«Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈΒ».

Объявим ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΒ Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ:

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {  }
  componentWillUnmount() {  }
  render() {
    return (
      <div>
        <h2>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!</h2>
        <h3>БСйчас {this.state.date.toLocaleTimeString()}.</h3>
      </div>
    );
  }
}

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Β«ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°Β» (lifecycle methods).

ΠœΠ΅Ρ‚ΠΎΠ΄ componentDidMount() запускаСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ отрСндСрился Π²Β DOMΒ β€” здСсь мы и установим Ρ‚Π°ΠΉΠΌΠ΅Ρ€:

  componentDidMount() {
    this.timerID = setInterval(      () => this.tick(),      1000    );  }

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ мы сохраняСм ID Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π²Β this (this.timerID).

Поля this.props ΠΈΒ this.state в классах — особСнныС, и их устанавливаСт сам React. Π’Ρ‹Β ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ поля, Ссли ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ID Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π²Β ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° componentWillUnmount():

  componentWillUnmount() {
    clearInterval(this.timerID);  }

НаконСц, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ tick(). ΠžΠ½Β Π·Π°ΠΏΡƒΡΠΊΠ°Π΅Ρ‚ΡΡ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду ΠΈΒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ this.setState().

this.setState() ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {    this.setState({      date: new Date()    });  }
  render() {
    return (
      <div>
        <h2>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!</h2>
        <h3>БСйчас {this.state.date.toLocaleTimeString()}.</h3>
      </div>
    );
  }
}

ReactDOM.render(
  <Clock />,
  document.getElementById('root')
);

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π°Β CodePen

Π’Π΅ΠΏΠ΅Ρ€ΡŒ часы ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нашС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΒ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ порядок, Π²Β ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

  1. Когда ΠΌΡ‹Β ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ <Clock /> Π²Β ReactDOM.render(), React Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ конструктор ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Clock Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя, поэтому ΠΌΡ‹Β Π·Π°Π΄Π°Ρ‘ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС this.state ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ с тСкущим Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ.
  2. React Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ render() ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Clock. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ React ΡƒΠ·Π½Π°Ρ‘Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ на экранС. Π”Π°Π»Π΅Π΅ React обновляСт DOM Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ он соотвСтствовал Π²Ρ‹Π²ΠΎΠ΄Ρƒ Ρ€Π΅Π½Π΄Π΅Ρ€Π° Clock.
  3. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π½Π΄Π΅Ρ€Π° Clock вставлСн Π²Β DOM, React Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° componentDidMount(). Π’Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Clock ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ tick() Ρ€Π°Π· в сСкунду.
  4. Π’Π°ΠΉΠΌΠ΅Ρ€ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ tick() СТСсСкундно. Π’Π½ΡƒΡ‚Ρ€ΠΈ tick() мы просим React ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ состояниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, вызывая setState() с тСкущим Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. React Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°Β ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния и снова запускаСт render(). На этот Ρ€Π°Π· this.state.date Π²Β ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ render() содСрТит Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, поэтому React Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ DOM. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Clock ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду обновляСт UI.
  5. Если ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Clock ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ удалится ΠΈΠ·Β DOM, React Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° componentWillUnmount() и сбросит Ρ‚Π°ΠΉΠΌΠ΅Ρ€.

Как ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ состояниС

Π’Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΎΒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ setState().

НС измСняйтС состояниС Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ

Π’Β ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€Π° нС происходит:


this.state.comment = 'ΠŸΡ€ΠΈΠ²Π΅Ρ‚';

ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ setState():


this.setState({comment: 'ΠŸΡ€ΠΈΠ²Π΅Ρ‚'});

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Β β€” это СдинствСнноС мСсто, Π³Π΄Π΅ Π²Ρ‹Β ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this.state Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

ОбновлСния состояния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ асинхронными

React ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² setState() Π²Β ΠΎΠ΄Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ this.props ΠΈΒ this.state ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ асинхронно, Π²Ρ‹Β Π½Π΅Β Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π°Β ΠΈΡ…Β Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для вычислСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ состояния.

НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅Β ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ счётчик:


this.setState({
  counter: this.state.counter + this.props.increment,
});

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° setState(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π°Β Π½Π΅Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚Π° функция ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ состояниС в качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° и значСния пропсов нСпосрСдствСнно во врСмя обновлСния в качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:


this.setState((state, props) => ({
  counter: state.counter + props.increment
}));

Π’Β Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹Β ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡ‚Ρ€Π΅Π»ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎΒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:


this.setState(function(state, props) {
  return {
    counter: state.counter + props.increment
  };
});

ОбновлСния состояния ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ

Когда ΠΌΡ‹Β Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ setState(), React ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (Π½ΠΎΠ²ΠΎΠ΅ состояниС) c Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ состояниСм.

НапримСр, состояниС ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ·Β Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… нСзависимых ΠΏΠΎΠ»Π΅ΠΉ:

  constructor(props) {
    super(props);
    this.state = {
      posts: [],      comments: []    };
  }

Π˜Ρ…Β ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΏΠΎΒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² setState():

  componentDidMount() {
    fetchPosts().then(response => {
      this.setState({
        posts: response.posts      });
    });

    fetchComments().then(response => {
      this.setState({
        comments: response.comments      });
    });
  }

Бостояния ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ повСрхностно, поэтому Π²Ρ‹Π·ΠΎΠ² this.setState({comments}) оставляСт this.state.posts Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌ, Π½ΠΎΒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ замСняСт this.state.comments.

ΠžΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…

Π’Β ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½ΠΈΒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ, Π½ΠΈΒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π΅Β Π·Π½Π°ΡŽΡ‚, Π·Π°Π΄Π°Π½ΠΎΒ Π»ΠΈ состояниС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π’Π°ΠΊΠΆΠ΅ Π½Π΅Β Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ Π±Ρ‹Π» создан ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Β β€” ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса.

БостояниС часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΒ», Β«Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΒ» ΠΈΠ»ΠΈ инкапсулированным. Оно доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для самого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° и скрыто ΠΎΡ‚Β Π΄Ρ€ΡƒΠ³ΠΈΡ….

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ своё состояниС Π²Π½ΠΈΠ· ΠΏΠΎΒ Π΄Π΅Ρ€Π΅Π²Ρƒ Π²Β Π²ΠΈΠ΄Π΅ пропсов Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

<FormattedDate date={this.state.date} />

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ FormattedDate ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ date Ρ‡Π΅Ρ€Π΅Π· пропсы, Π½ΠΎΒ ΠΎΠ½Β Π½Π΅Β Π·Π½Π°Π΅Ρ‚, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΈ взялись ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΒ β€” из состояния Clock, пропсов Clock ΠΈΠ»ΠΈ просто JavaScript-выраТСния:

function FormattedDate(props) {
  return <h3>БСйчас {props.date.toLocaleTimeString()}.</h3>;
}

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π°Β CodePen

Π­Ρ‚ΠΎ, Π²Β ΠΎΠ±Ρ‰Π΅ΠΌ, называСтся «нисходящим» (Β«top-downΒ») ΠΈΠ»ΠΈ Β«ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΒ» (Β«unidirectionalΒ») ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. БостояниС всСгда ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ, Π°Β Π»ΡŽΠ±Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ этого состояния ΠΌΠΎΠ³ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Β ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, находящиСся Β«Π½ΠΈΠΆΠ΅Β» Π²Β Π΄Π΅Ρ€Π΅Π²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

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

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, создадим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ App, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° <Clock>:

function App() {
  return (
    <div>
      <Clock />      <Clock />      <Clock />    </div>
  );
}

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π°Β CodePen

Π£Β ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Clock Π΅ΡΡ‚ΡŒ собствСнноС состояниС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обновляСтся нСзависимо ΠΎΡ‚Β Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π’Β React-прилоТСниях, ΠΈΠΌΠ΅Π΅Ρ‚Β Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ состояниС ΠΈΠ»ΠΈ Π½Π΅Ρ‚Β β€” это внутрСнняя Π΄Π΅Ρ‚Π°Π»ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ со врСмСнСм. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π΅Π· состояния Π²Β ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… с состояниСм, ΠΈΒ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Π¦ΠΈΠΊΠ» событий Node.js

ВступлСниС

Π’Π¦ΠΈΠΊΠ» событий— ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых Π²Π°ΠΆΠ½Ρ‹Ρ… аспСктов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΎ Node.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Ρ‚Π°ΠΊ Π²Π°ΠΆΠ½ΠΎ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΊΠ°ΠΊ Node ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ асинхронным ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄, ΠΈ поэтому Π² основном ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ «убийствСнноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Β» Node, Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сдСлало Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ.

Код JavaScript для Node.js выполняСтся Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ событиС.

Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½Π΅ бСспокоясь ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°.

Π’Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ свой ΠΊΠΎΠ΄, ΠΈ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ всСго, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, синхронных сСтСвых Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΠ»ΠΈ бСсконСчныхпСтли.

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

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

Π’ основном Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ²Π°Ρˆ ΠΊΠΎΠ΄Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ событий ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ этого, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ†ΠΈΠΊΠ»Π° событий

Π›ΡŽΠ±ΠΎΠΉ ΠΊΠΎΠ΄ JavaScript, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ трСбуСтся слишком ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° управлСния Π² Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий, Π±ΡƒΠ΄Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ любого ΠΊΠΎΠ΄Π° JavaScript Π½Π° страницС, Π΄Π°ΠΆΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‰Π΅Π»ΠΊΠ°Ρ‚ΡŒ ΠΌΡ‹ΡˆΡŒΡŽ, ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒ страницу ΠΈ Ρ‚. Π”.

ΠŸΠΎΡ‡Ρ‚ΠΈ всС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π² JavaScript Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅. Π‘Π΅Ρ‚Π΅Π²Ρ‹Π΅ запросы, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой ΠΈ Ρ‚. Π”. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° — это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому JavaScript Ρ‚Π°ΠΊ сильно основан Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ…, Π° Π² послСднСС врСмя наобСщанияиасинхронный / ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅.

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² прСдставляСт собой ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ LIFO (Last In, First Out).

Π¦ΠΈΠΊΠ» событий постоянно провСряСтстСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

ΠŸΡ€ΠΈ этом ΠΎΠ½ добавляСт любой Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ выполняСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎ порядку.

Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ трассировку стСка ошибок, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π½Π°ΠΊΠΎΠΌΡ‹, Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ ΠΈΠ»ΠΈ Π² консоли Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°? Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ просматриваСт ΠΈΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π²Π°ΠΌ, какая функция ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ²:

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ объяснСниС Ρ†ΠΈΠΊΠ»Π° событий

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽfoo,barΠΈbazΠ² качСствСслучайныС ΠΈΠΌΠ΅Π½Π°. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ любоС имя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ….

const bar = () => console.log('bar')

const baz = () => console.log(β€˜baz’)

const foo = () => { console.log(β€˜foo’) bar() baz() }

foo()

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚

как и оТидалось.

Когда этот ΠΊΠΎΠ΄ запускаСтся, сначалаfoo()называСтся. Π’Π½ΡƒΡ‚Ρ€ΠΈfoo()ΠΌΡ‹ сначала Π·Π²ΠΎΠ½ΠΈΠΌbar(), Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π·Π²ΠΎΠ½ΠΈΠΌbaz().

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² выглядит Ρ‚Π°ΠΊ:

Π¦ΠΈΠΊΠ» событий Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ провСряСт, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΈ выполняСт это:

ΠΏΠΎΠΊΠ° стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π½Π΅ станСт пустым.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ выглядит Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного: JavaScript Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π²Π΅Ρ‰ΠΈ для выполнСния, запускаСт ΠΈΡ… ΠΏΠΎ порядку.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° стСк Π½Π΅ очистится.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ использованияsetTimeout(() => {}), 0)Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ выполнятся всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΊΠΎΠ΄Π΅.

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

const bar = () => console.log('bar')

const baz = () => console.log(β€˜baz’)

const foo = () => { console.log(β€˜foo’) setTimeout(bar, 0) baz() }

foo()

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ:

Когда этот ΠΊΠΎΠ΄ запускаСтся, сначала вызываСтся foo (). Π’Π½ΡƒΡ‚Ρ€ΠΈ foo () ΠΌΡ‹ сначала Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ setTimeout, пСрСдаваяbarΠ² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΈ ΠΌΡ‹ инструктируСм Π΅Π³ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ быстрСС, пСрСдавая 0 Π² качСствС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ baz ().

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² выглядит Ρ‚Π°ΠΊ:

Π’ΠΎΡ‚ порядок выполнСния всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:

ΠŸΠΎΡ‡Π΅ΠΌΡƒ это происходит?

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний

Когда вызываСтся setTimeout (), Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΈΠ»ΠΈ Node.js Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚Ρ‚Π°ΠΉΠΌΠ΅Ρ€. По истСчСнии Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС сразу послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ установили 0 Π² качСствС Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π°, функция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° помСщаСтся Π²ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний.

Π’ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний Ρ‚Π°ΠΊΠΆΠ΅ находятся ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ события, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ события Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΈΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, илипринСстиотвСты ставятся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ваш ΠΊΠΎΠ΄ смоТСт Π½Π° Π½ΠΈΡ… ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Или Ρ‚Π°ΠΊΠΆΠ΅Π”ΠžΠœΡ‚Π°ΠΊΠΈΠ΅ события, ΠΊΠ°ΠΊonLoad.

Π¦ΠΈΠΊΠ» ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ стСку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΈ сначала ΠΎΠ½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС, Ρ‡Ρ‚ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π° ΠΊΠΎΠ³Π΄Π° Ρ‚Π°ΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅Ρ‚, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ΄Π±ΠΎΡ€Ρƒ Π²Π΅Ρ‰Π΅ΠΉ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний.

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

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π½ΠΈΠΉ ES6

ECMAScript 2015прСдставила ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΉ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Promises (Ρ‚Π°ΠΊΠΆΠ΅ прСдставлСнная Π² ES6 / ES2015). Π­Ρ‚ΠΎ способ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ скорСС Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ асинхронной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ† стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

ΠžΠ±Π΅Ρ‰Π°Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ сразу послС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

МнС нравится аналогия с ΠΏΠΎΠ΅Π·Π΄ΠΊΠΎΠΉ Π½Π° амСриканских Π³ΠΎΡ€ΠΊΠ°Ρ… Π² ΠΏΠ°Ρ€ΠΊΠ΅ Ρ€Π°Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΉ: ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ вас Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΏΠΎΠ·Π°Π΄ΠΈ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… людСй, Π³Π΄Π΅ Π²Π°ΠΌ придСтся ΠΆΠ΄Π°Ρ‚ΡŒ своСй ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π½ΠΈΠΉ — это Π±ΠΈΠ»Π΅Ρ‚ Fastpass Ρ‡Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ΅Π·Π΄ΠΊΡƒ сразу послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

const bar = () => console.log('bar')

const baz = () => console.log(β€˜baz’)

const foo = () => { console.log(β€˜foo’) setTimeout(bar, 0) new Promise((resolve, reject) => resolve(β€˜should be right after baz, before bar’) ).then(resolve => console.log(resolve)) baz() }

foo()

Π­Ρ‚ΠΎ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚

foo
baz
should be right after baz, before bar
bar

Π’ этом большая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Promises (ΠΈ Async / await, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ построСн Π½Π° обСщаниях) ΠΈ простыми старыми асинхронными функциями Ρ‡Π΅Ρ€Π΅Π·setTimeout()ΠΈΠ»ΠΈ API Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ.

Π’Ρ‹Π²ΠΎΠ΄

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»Π° вас с основными ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Ρ†ΠΈΠΊΠ»Π° событий Node.js.

Π­Ρ‚ΠΎ ваТная Ρ‡Π°ΡΡ‚ΡŒ любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанной Π½Π° Node.js, ΠΈ я надСюсь, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· описанных здСсь ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π²Π°ΠΌ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.


Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ руководства ΠΏΠΎ ΡƒΠ·Π»Π°ΠΌ:


Руководство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΠΎ концСпциям ΠΈ ΠΊΠΎΠ΄Ρƒ

На Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ 12 ΠΌΠΈΠ½ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΎΠ² 58 ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ

ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ на любом языкС программирования слоТна. Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΈΒ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Ρ€ΠΎΠΆΡŒ Π΄Π°ΠΆΠ΅ у самых ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ². Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся асинхронно, нСпрСдсказуСм, ΠΈΒ Π΅Π³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ошибок. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ соврСмСнныС вычислСния ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько ядСр. Π’Β ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ядрС процСссора Π΅ΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΒ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π΅, ΠΈΒ Π½ΠΈΡ‡Π΅Π³ΠΎ нС становится быстрСС. Π­Ρ‚ΠΎ заставляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΠΈΡΠ°Ρ‚ΡŒ эффСктивный ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ прСимущСства оборудования.

JavaScript являСтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Π½ΠΎΒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚Β Π»ΠΈ это использованиС Node соврСмСнной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹? Одна из самых Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΒ β€” это Ρ€Π°Π±ΠΎΡ‚Π° с нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ·-Π·Π° присущСй им слоТности. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ контСкста ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ обходятся Π΄ΠΎΡ€ΠΎΠ³ΠΎ. Π˜Β ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма, и программист Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ мноТСство ΠΊΡ€Π°ΠΉΠ½ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². В этом Π΄ΡƒΠ±Π»Π΅ я покаТу Π²Π°ΠΌ, ΠΊΠ°ΠΊ Node справляСтся с этой трясиной Ρ‡Π΅Ρ€Π΅Π· Ρ†ΠΈΠΊΠ» событий. Π―Β ΠΈΡΡΠ»Π΅Π΄ΡƒΡŽ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π° событий Node.js ΠΈΒ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ, ΠΊΠ°ΠΊ ΠΎΠ½Β Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Одна ΠΈΠ·Β Β«ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰ΠΈΡ…Β» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Β NodeΒ β€” это Ρ†ΠΈΠΊΠ», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Β Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ Π½ΠΎΠ²Ρ‹ΠΌ способом.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ†ΠΈΠΊΠ» событий?

Π¦ΠΈΠΊΠ» событий — это ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ, Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ и асинхронно ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ». Для Ρ‚Π΅Ρ…, ΡƒΒ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚ стСпСни в области ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… Π½Π°ΡƒΠΊ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС Π²Π΅Π±-запрос, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ поиск Π²Β Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Один ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ‰ΡŒ Π·Π°Β Ρ€Π°Π·. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚Β Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ½Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Π’Β Ρ†ΠΈΠΊΠ»Π΅ событий основной Ρ†ΠΈΠΊΠ» Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΒ Π½Π΅Β ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ†ΠΈΠΊΠ» нС блокируСтся, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с болСС Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ Π²Π΅Π±-запросом. НСсколько запросов ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ поставлСны Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ…Β ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π¦ΠΈΠΊΠ» Π½Π΅Β ΠΆΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ всСго ΠΎΡ‚Β ΠΎΠ΄Π½ΠΎΠ³ΠΎ запроса, Π½ΠΎΒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΠΎΒ ΠΌΠ΅Ρ€Π΅ их поступлСния Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

Π‘Π°ΠΌ Ρ†ΠΈΠΊΠ» являСтся полубСсконСчным, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΠ»ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° пусты, ΠΎΠ½Β ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ·Β Ρ†ΠΈΠΊΠ»Π°. ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ о стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΊΠ°ΠΊ о синхронном ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ раскручиваСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ console.log, Π΄ΠΎΒ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ†ΠΈΠΊΠ» запросит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Node ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ libuv ΠΏΠΎΠ΄ ΠΏΡ€ΠΈΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму Π½Π°Β ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² от входящих ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

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

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‚ΠΎΠΆΠ΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. Если ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² возвращаСтся с данными, ΠΎΠ½Β Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΌΠ°Ρ€ΡˆΠ°Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ контСкст ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π²Β Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎΡ‚ΠΎΠΊ. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ происходит ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС, Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π¦ΠΈΠΊΠ» событий устраняСт ошибки, ΠΊΠΎΠ³Π΄Π° нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ рСсурсы, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Β ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ. ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Π°Ρ пСтля ΠΎΠ±Ρ€Π΅Π·Π°Π΅Ρ‚ ΠΊΡ€Π°ΠΉΠ½ΠΈΠ΅ случаи, бСзопасныС для Π½ΠΈΡ‚Π΅ΠΉ, ΠΈΒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ контСкст Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС. Π­Ρ‚ΠΎ настоящий Π³Π΅Π½ΠΈΠΉ Π·Π°Β ΠΏΠ΅Ρ‚Π»Π΅ΠΉ. ΠžΠ½Β ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ соСдинСния ΠΈΒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΎΡΡ‚Π°Π²Π°ΡΡΡŒ ΠΏΡ€ΠΈ этом ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ.

ΠŸΠΎΠ»ΡƒΠ±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»

Π‘Π°ΠΌΡ‹ΠΉ большой вопрос, Π½Π°Β ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» событий,Β β€” ΠΆΠΈΠ²Β Π»ΠΈ Ρ†ΠΈΠΊΠ». Если это Ρ‚Π°ΠΊ, он опрСдСляСт, ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. На каТдой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ» раскручиваСт стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π·Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ основной Ρ†ΠΈΠΊΠ»:

setTimeout(
  () => console.log('Hi from the callback queue'),
  5000); 

const stopTime = Date.now() + 2000;
while (Date.now() < stopTime) {} 

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

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°

Π§Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° ΡΒ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽ основной Ρ†ΠΈΠΊΠ», Π°Β Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²? Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΠΊΠ» блокируСтся, он большС Π½Π΅Β ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ:

const stopTime = Date.now() + 2000;
while (Date.now() < stopTime) {} 


setTimeout(() => console.log('Ran callback A'), 5000);

На этот Ρ€Π°Π· пСтля остаСтся Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π²Β Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ сСми сСкунд. Π¦ΠΈΠΊΠ» событий Ρ‚ΡƒΠΏΠΎΠΉ в своСй простотС. Π£Β Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ возмоТности ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π²Β Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. Π’Β Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ систСмС входящиС ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ставятся Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈΒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ основной Ρ†ΠΈΠΊΠ» свободСн для опроса. Π¦ΠΈΠΊΠ» событий ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ нСсколько этапов, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Β Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ собСсСдованиС ΠΏΠΎΒ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΠΏΠ΅Ρ‚Π»ΠΈ, ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π»ΠΈΠ²ΠΎΠ³ΠΎ ΠΆΠ°Ρ€Π³ΠΎΠ½Π°, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ «эмиттСр событий» ΠΈΠ»ΠΈ Β«ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Ρ€Π΅Π°ΠΊΡ‚ΠΎΡ€Π°Β». Π­Ρ‚ΠΎ скромный ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ», ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΒ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ.

Π¦ΠΈΠΊΠ» событий с asyncΒ / await

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ основного Ρ†ΠΈΠΊΠ»Π°, ΠΎΠ΄Π½Π° ΠΈΠ·Β ΠΈΠ΄Π΅ΠΉΒ β€” ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ синхронный Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π²ΠΎΠΊΡ€ΡƒΠ³ asyncΒ / await:

const fs = require('fs');
const readFileSync = async (path) => await fs.readFileSync(path);

readFileSync('readme.md').then((data) => console.log(data));
console.log('The event loop continues without blocking...');

ВсС, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ послС, awaitпоступаСт ΠΈΠ·Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Код читаСтся ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ синхронной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, но нС блокируСтся. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ asyncΒ / await Π΄Π΅Π»Π°Π΅Ρ‚ readFileSync thenable, Ρ‡Ρ‚ΠΎ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ Π΅Π³ΠΎ из основного Ρ†ΠΈΠΊΠ»Π°. Π”ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ±ΠΎ всСм, Ρ‡Ρ‚ΠΎ происходит послС, awaitΠΊΠ°ΠΊ ΠΎΒ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ².

ПолноС раскрытиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ: ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для дСмонстрационных Ρ†Π΅Π»Π΅ΠΉ. Π’Β Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ fs.readFile, запускаСтся ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΎΠΊΡ€ΡƒΠ³ обСщания. ΠžΠ±Ρ‰Π΅Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ остаСтся в силС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это снимаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° с основного Ρ†ΠΈΠΊΠ»Π°.

Π€Π°Π·Ρ‹ Ρ†ΠΈΠΊΠ»Π° событий

Π­Ρ‚ΠΎ Ρ„Π°Π·Ρ‹ Ρ†ΠΈΠΊΠ»Π° событий:

  1. ΠœΠ΅Ρ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ. Π¦ΠΈΠΊΠ» событий ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя Π²Β Π½Π°Ρ‡Π°Π»Π΅ Ρ†ΠΈΠΊΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ частых систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², связанных со врСмСнСм. Π­Ρ‚ΠΈ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ для libuv.
  2. ΠŸΠ΅Ρ‚Π»Ρ Тивая? Если ΡƒΒ Ρ†ΠΈΠΊΠ»Π° Π΅ΡΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ дСскрипторы, Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ запросы ΠΈΠ»ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ дСскрипторы, ΠΎΠ½Β ΠΆΠΈΠ². Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ†ΠΈΠΊΠ».
  3. Π‘Ρ€ΠΎΠΊ исполнСния Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ². Π—Π΄Π΅ΡΡŒ setTimeoutΠΈΠ»ΠΈ setIntervalΠ²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹. Π¦ΠΈΠΊΠ» провСряСт ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСйчасна Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², срок дСйствия ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… истСк.
  4. ΠžΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ. Если прСдыдущая итСрация ΠΎΡ‚Π»ΠΎΠΆΠΈΠ»Π° ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ в этой Ρ‚ΠΎΡ‡ΠΊΠ΅. ΠžΠΏΡ€ΠΎΡ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ запускаСт ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½ΠΎΒ Π΅ΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π­Ρ‚ΠΎΡ‚ шаг касаСтся всСх ΠΎΡ‚ΡΡ‚Π°Π²ΡˆΠΈΡ… ΠΎΡ‚Β ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.
  5. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ простоя Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡΒ β€” в основном ΠΈΠ·-Π·Π° ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ имСнования, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π½Π°Β ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΒ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ для libuv.
  6. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ дСскрипторы для setImmediateвыполнСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π²Β ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°. Π­Ρ‚ΠΈ дСскрипторы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Ρ†ΠΈΠΊΠ»Π° для Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΒ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для этого Ρ‚ΠΈΠΏΠ° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.
  7. Π Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ опроса. Π¦ΠΈΠΊΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ он блокируСтся для Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ он рассчитываСт Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚:
    • Если Ρ†ΠΈΠΊΠ» Π²ΠΎΡ‚-Π²ΠΎΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ Ρ€Π°Π²Π΅Π½ 0.
    • НСт Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… дСскрипторов ΠΈΠ»ΠΈ запросов, Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ Ρ€Π°Π²Π΅Π½ 0.
    • Если Π΅ΡΡ‚ΡŒ свободныС дСскрипторы, Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ Ρ€Π°Π²Π΅Π½ 0.
    • Если Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ дСскрипторы, Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ Ρ€Π°Π²Π΅Π½ 0.
    • Π•ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ дСскрипторы, Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ Ρ€Π°Π²Π΅Π½ 0.
    • Если Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΈΠ·Β Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ, Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ устанавливаСтся на блиТайший Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΈΠ»ΠΈ, Ссли Π½Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², Π½Π°Β Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ.
  8. Π¦ΠΈΠΊΠ» блокируСтся для Π²Π²ΠΎΠ΄Π°Β / Π²Ρ‹Π²ΠΎΠ΄Π° ΡΒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·Β ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Ρ„Π°Π·Ρ‹. В этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹, связанныС с вводом-Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ.
  9. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ дСскриптора ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. На этом этапС setImmediateзапускаСтся, и он являСтся Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Ρ€ΡƒΡ‡Π΅ΠΊ. Π›ΡŽΠ±Ρ‹Π΅ setImmediateΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ в сСрСдинС Π²Π²ΠΎΠ΄Β / Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ здСсь.
  10. Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ закрытия. Π­Ρ‚ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ дСскрипторы Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… соСдинСний.
  11. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ заканчиваСтся.

Π’Ρ‹Β ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒΡΡ вопросом, ΠΏΠΎΡ‡Π΅ΠΌΡƒ опросныС Π±Π»ΠΎΠΊΠΈ для Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΊΠΎΠ³Π΄Π° прСдполагаСтся, Ρ‡Ρ‚ΠΎ это Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ? Π¦ΠΈΠΊΠ» блокируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² и стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² пуст. Π’Β Node блиТайший Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн setTimeout, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ. Если установлСно Π½Π°Β Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ, Ρ†ΠΈΠΊΠ» ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ входящих соСдинСний с большСй Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ. Π­Ρ‚ΠΎ полубСсконСчный Ρ†ΠΈΠΊΠ», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ опрос ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ†ΠΈΠΊΠ», ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‡Π΅Π³ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΒ Π΅ΡΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ соСдинСниС.

Π’ΠΎΡ‚ вСрсия этого вычислСния Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° для Unix во всСй красС C:

int uv_backend_timeout(const uv_loop_t* loop) {
  if (loop->stop_flag != )
    return ;

  if (!uv__has_active_handles(loop) && !uv__has_active_reqs(loop))
    return ;

  if (!QUEUE_EMPTY(&loop->idle_handles))
    return ;

  if (!QUEUE_EMPTY(&loop->pending_queue))
    return ;

  if (loop->closing_handles)
    return ;

  return uv__next_timeout(loop);
}

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹Β Π½Π΅Β ΡΠ»ΠΈΡˆΠΊΠΎΠΌ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с C, но он читаСтся ΠΊΠ°ΠΊ английский ΠΈΒ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎΒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ находится в сСдьмой Ρ„Π°Π·Π΅.

ΠŸΠΎΡΡ‚Π°ΠΏΠ½Π°Ρ дСмонстрация

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ„Π°Π·Ρƒ на простом JavaScript:


const http = require('http');



const server = http.createServer((req, res) => {
  
  res.end();
});



server.listen(8000);

const options = {
  
  hostname: '127.0.0.1',
  port: 8000
};

const sendHttpRequest = () => {
  
  
  const req = http.request(options, () => {
    console.log('Response received from the server');

    
    setImmediate(() =>
      
       server.close(() =>
        
        console.log('Closing the server')));
  });
  req.end();
};



setTimeout(() => sendHttpRequest(), 8000);


ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π°Β Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ Ρ„Π°Π·Π΅ и до дСвятой, ΠΎΠΆΠΈΠ΄Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ setImmediate()ΡΡ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ:

fs.readFile('readme.md', () => {
  setTimeout(() => console.log('File I/O callback via setTimeout()'), );
  
  setImmediate(() => console.log('File I/O callback via setImmediate()'));
});

Π‘Π΅Ρ‚Π΅Π²ΠΎΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π±Π΅Π· поиска DNS дСшСвлС, Ρ‡Π΅ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ он выполняСтся в основном Ρ†ΠΈΠΊΠ»Π΅ событий. ВмСсто этого Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ ставится Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Поиск DNS Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², поэтому сСтСвой Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ становится Ρ‚Π°ΠΊΠΈΠΌΒ ΠΆΠ΅ Π΄ΠΎΡ€ΠΎΠ³ΠΈΠΌ, ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄.

ΠŸΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ устройство ΡƒΠ·Π»Π° состоит ΠΈΠ·Β Π΄Π²ΡƒΡ… основных частСй: Π΄Π²ΠΈΠΆΠΊΠ° JavaScript V8Β ΠΈΒ libuv. Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄, поиск DNS и сСтСвой Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· libuv.

Π­Ρ‚ΠΎ общая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°:

Для сСтСвого Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Ρ†ΠΈΠΊΠ» событий ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ основного ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ нС являСтся потокобСзопасным, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Β Π½Π΅Β ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ контСкст с другим ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ и поиск DNS зависят ΠΎΡ‚Β ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, поэтому ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ состоит Π²Β Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΡ…Β Π²Β ΠΏΡƒΠ»Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Одна ΠΈΠ·Β ΠΈΠ΄Π΅ΠΉΒ β€” ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск DNS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅Β ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π²Β ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²Β ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅. Π’Π²ΠΎΠ΄ IP-адрСса localhost, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ поиск ΠΈΠ·Β ΠΏΡƒΠ»Π°. ΠŸΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство доступных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ UV_THREADPOOL_SIZEΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΠΎΒ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ составляСт ΠΎΠΊΠΎΠ»ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ….

V8 выполняСтся Π²Β ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅, ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π°Β Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Ρƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий. V8Β ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для сборки мусора Π²Π½Π΅ собствСнного Ρ†ΠΈΠΊΠ»Π°. Π”ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΒ V8Β ΠΊΠ°ΠΊ ΠΎΒ Π΄Π²ΠΈΠΆΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ JavaScript и запускаСт Π΅Π³ΠΎ Π½Π°Β ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ.

Для срСднСго программиста JavaScript остаСтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ бСзопасности. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ V8Β ΠΈΒ libuv ΡΠΎΠ·Π΄Π°ΡŽΡ‚ свои собствСнныС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ для удовлСтворСния своих потрСбностСй.

Если Π²Β Node Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ, Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ с основного Ρ†ΠΈΠΊΠ»Π° событий. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ трСбуСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ для выполнСния ΠΎΠ΄Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Β Π±ΠΎΠ»Π΅Π΅ ста миллисСкунд. Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, нС истощСн ли ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ·Β ΠΏΡƒΠ»Π°. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡƒΠ»Π° ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды. ПослСдний ΡˆΠ°Π³Β β€” микротСстированиС ΠΊΠΎΠ΄Π° JavaScript Π²Β V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся синхронно.

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅

Π¦ΠΈΠΊΠ» событий ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ„Π°Π·Ρƒ ΠΏΠΎΒ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ставятся Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Но на каТдом этапС Π΅ΡΡ‚ΡŒ способ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Β ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

process.nextTick() ΠΏΡ€ΠΎΡ‚ΠΈΠ² setImmediate()

Π’Β ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„Π°Π·Ρ‹ Ρ†ΠΈΠΊΠ» выполняСт process.nextTick()ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ². ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ этот Ρ‚ΠΈΠΏ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° нС являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° событий, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ он выполняСтся Π²Β ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„Π°Π·Ρ‹. setImmediate()ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Π½Π΅Β Ρ‚Π°ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ, ΠΊΠ°ΠΊ слСдуСт из названия. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ process.nextTick()Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ доскональноС Π·Π½Π°Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° событий, ΡΒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ setImmediate()Π² Ρ†Π΅Π»ΠΎΠΌ.

Π•ΡΡ‚ΡŒ нСсколько ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎΒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ process.nextTick():

  1. Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ сСтСвому Π²Π²ΠΎΠ΄Ρƒ-Π²Ρ‹Π²ΠΎΠ΄Ρƒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ очистку ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ запрос до продолТСния Ρ†ΠΈΠΊΠ»Π°.
  2. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² послС раскрутки стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², но до продолТСния Ρ†ΠΈΠΊΠ»Π°.

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, эмиттСр событий Ρ…ΠΎΡ‡Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ событиС, Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ в собствСнном конструкторС. ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ события стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ.

const EventEmitter = require('events');

class ImpatientEmitter extends EventEmitter {
  constructor() {
    super();

    
    process.nextTick(() => this.emit('event'));
  }
}

const emitter = new ImpatientEmitter();
emitter.on('event', () => console.log('An impatient event occurred!'));

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ стСку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ€Π°ΡΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ошибки, ΠΊΠ°ΠΊ RangeError: Maximum call stack size exceeded. Одна ΠΈΠ·Β ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΒ β€” ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ process.nextTick()Ρ†ΠΈΠΊΠ» событий нС блокируСтся. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΈ рСкурсивных ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… Π½Π°Β ΠΎΠ΄Π½ΠΎΠΉ ΠΈΒ Ρ‚ΠΎΠΉΒ ΠΆΠ΅ Ρ„Π°Π·Π΅.

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

Π¦ΠΈΠΊΠ» событий — это простота Π²Β Π²Ρ‹ΡΡˆΠ΅ΠΉ стСпСни изощрСнности. Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ слоТных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ. ΠžΠ½Β ΡƒΠ΄Π°Π»ΡΠ΅Ρ‚Β Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅Β ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ»ΠΈ Π½Π΅Β Π½ΡƒΠΆΠ½ΠΎ, и максимально эффСктивно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ. Из-Π·Π° этого программисты Node тратят мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ на погоню за асинхронными ошибками и большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Β Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Node js Ρ†ΠΈΠΊΠ» for — Вэб-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚Π΅Π»Π΅ΠΉ!

ΠŸΡ€ΠΈ написании скриптов Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ встаёт Π·Π°Π΄Π°Ρ‡Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ΅ дСйствиС ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·.

НапримСр, вывСсти Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ ΠΈΠ· списка ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ. Или просто ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС числа ΠΎΡ‚ 1 Π΄ΠΎ 10 ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄.

Для ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ повторСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ участка ΠΊΠΎΠ΄Π° прСдусмотрСны Ρ†ΠΈΠΊΠ»Ρ‹.

Π¦ΠΈΠΊΠ» Β«whileΒ»

Π¦ΠΈΠΊΠ» while ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

Код ΠΈΠ· Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° выполняСтся, ΠΏΠΎΠΊΠ° условиС condition истинно.

НапримСр, Ρ†ΠΈΠΊΠ» Π½ΠΈΠΆΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ i , ΠΏΠΎΠΊΠ° i :

Одно Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎ-Π½Π°ΡƒΡ‡Π½ΠΎΠΌΡƒ называСтся итСрация. Π¦ΠΈΠΊΠ» Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Если Π±Ρ‹ строка i++ отсутствовала Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» Π±Ρ‹ повторялся (Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ) Π²Π΅Ρ‡Π½ΠΎ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, ΠΎΠ½ прСдоставит ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ «подвисший» скрипт, Π° JavaScript Π½Π° сторонС сСрвСра придётся Β«ΡƒΠ±ΠΈΡ‚ΡŒΒ» процСсс.

Π›ΡŽΠ±ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ условиСм Ρ†ΠΈΠΊΠ»Π°, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сравнСниС: условиС while вычисляСтся ΠΈ прСобразуСтся Π² логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

НапримСр, while (i) – Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ while (i != 0) :

Если Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° состоит лишь ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ инструкции, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки <…>:

Π¦ΠΈΠΊΠ» Β«do…whileΒ»

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ условия ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ Ρ‚Π΅Π»ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ синтаксис do..while :

Π¦ΠΈΠΊΠ» сначала Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Ρ‚Π΅Π»ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ условиС condition , ΠΈ ΠΏΠΎΠΊΠ° Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ true , ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ снова ΠΈ снова.

Вакая Ρ„ΠΎΡ€ΠΌΠ° синтаксиса ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π°, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΎΡΡŒ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π΄Π°ΠΆΠ΅ Ссли условиС окаТСтся Π»ΠΎΠΆΠ½Ρ‹ΠΌ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ° с прСдусловиСм: while(…) <…>.

Π¦ΠΈΠΊΠ» Β«forΒ»

Π‘ΠΎΠ»Π΅Π΅ слоТный, Π½ΠΎ ΠΏΡ€ΠΈ этом самый распространённый Ρ†ΠΈΠΊΠ» β€” Ρ†ΠΈΠΊΠ» for .

Выглядит ΠΎΠ½ Ρ‚Π°ΠΊ:

Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ каТдая Ρ‡Π°ΡΡ‚ΡŒ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π¦ΠΈΠΊΠ» Π½ΠΈΠΆΠ΅ выполняСт alert(i) для i ΠΎΡ‚ 0 Π΄ΠΎ (Π½ΠΎ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ) 3 :

Рассмотрим ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ for ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅ΠΉ:

Ρ‡Π°ΡΡ‚ΡŒ
Π½Π°Ρ‡Π°Π»ΠΎi = 0ВыполняСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Ρ†ΠΈΠΊΠ»
условиСiΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Ρ†ΠΈΠΊΠ»Π°. Если ΠΎΠ½ΠΎ вычислится Π² false , Ρ†ΠΈΠΊΠ» остановится.
шагi++ВыполняСтся послС Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ условия.
Ρ‚Π΅Π»ΠΎalert(i)ВыполняСтся снова ΠΈ снова, ΠΏΠΎΠΊΠ° условиС вычисляСтся Π² true .

Π’ Ρ†Π΅Π»ΠΎΠΌ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ†ΠΈΠΊΠ»Π° выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π½Π°Ρ‡Π°Π»ΠΎ выполняСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π° Π·Π°Ρ‚Π΅ΠΌ каТдая итСрация Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ условия, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся Ρ‚Π΅Π»ΠΎ ΠΈ шаг.

Если Ρ‚Π΅ΠΌΠ° Ρ†ΠΈΠΊΠ»ΠΎΠ² для вас Π½ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π²Ρ‹ΡˆΠ΅ ΠΈ воспроизвСсти Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° листС Π±ΡƒΠΌΠ°Π³ΠΈ, шаг Π·Π° шагом.

Π’ΠΎΡ‚ Π² точности Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π² нашСм случаС:

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ пСрСмСнная счётчика i Π±Ρ‹Π»Π° объявлСна прямо Π² Ρ†ΠΈΠΊΠ»Π΅. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ «встроСнноС» объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°.

ВмСсто объявлСния Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ:

ΠŸΡ€ΠΎΠΏΡƒΡΠΊ частСй Β«forΒ»

Π›ΡŽΠ±Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ for ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π°.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΠΎ Ссли Π½Π°ΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ стартом Ρ†ΠΈΠΊΠ»Π°.

МоТно ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ шаг :

Π­Ρ‚ΠΎ сдСлаСт Ρ†ΠΈΠΊΠ» Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ while (i .

А ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ всё, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² бСсконСчный Ρ†ΠΈΠΊΠ»:

ΠŸΡ€ΠΈ этом сами Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой ; ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΠ½Π°Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ошибка синтаксиса.

ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π°: Β«breakΒ»

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ вычислСнии условия Π² false .

Но ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ break .

НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ подсчитываСт сумму Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… чисСл Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒ ΠΈΡ… Π²Π²ΠΎΠ΄ΠΈΡ‚, Π° Π·Π°Ρ‚Π΅ΠΌ – Π²Ρ‹Π΄Π°Ρ‘Ρ‚:

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° break Π² строкС (*) ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° строку Π·Π° Π΅Π³ΠΎ Ρ‚Π΅Π»ΠΎΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° alert .

Π’ΠΎΠΎΠ±Ρ‰Π΅, сочСтаниС «бСсконСчный Ρ†ΠΈΠΊΠ» + break Β» – отличная ΡˆΡ‚ΡƒΠΊΠ° для Ρ‚Π΅Ρ… ситуаций, ΠΊΠΎΠ³Π΄Π° условиС, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒΡΡ, находится Π½Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ†Π΅ Ρ†ΠΈΠΊΠ»Π°, Π° посСрСдинС.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ: continue

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° continue – «облСгчённая вСрсия» break . ΠŸΡ€ΠΈ Π΅Ρ‘ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ†ΠΈΠΊΠ» Π½Π΅ прСрываСтся, Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ (Ссли условиС всС Π΅Ρ‰Ρ‘ Ρ€Π°Π²Π½ΠΎ true ).

Π•Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, Ссли понятно, Ρ‡Ρ‚ΠΎ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅ Ρ†ΠΈΠΊΠ»Π° Π΄Π΅Π»Π°Ρ‚ΡŒ большС Π½Π΅Ρ‡Π΅Π³ΠΎ.

НапримСр, Ρ†ΠΈΠΊΠ» Π½ΠΈΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ continue , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Ρ‡Ρ‘Ρ‚Π½Ρ‹Π΅ значСния:

Для Ρ‡Ρ‘Ρ‚Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ i , Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° continue ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ for (со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ числом). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ alert вызываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅Ρ‡Ρ‘Ρ‚Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π¦ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Ρ‡Ρ‘Ρ‚Π½Ρ‹Π΅ значСния, ΠΌΠΎΠ³ Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π‘ тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, вмСсто continue ΠΌΠΎΠΆΠ½ΠΎ просто Π·Π°Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ дСйствия Π² Π±Π»ΠΎΠΊ if .

Однако ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ влоТСнности Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок. Если ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ if Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ, Ρ‚ΠΎ это ΡƒΡ…ΡƒΠ΄ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° с continue .

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ эти синтаксичСскиС конструкции Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ выраТСниями ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ с Ρ‚Π΅Ρ€Π½Π°Ρ€Π½Ρ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ? . Π’ частности, использованиС Ρ‚Π°ΠΊΠΈΡ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ², ΠΊΠ°ΠΊ break/continue , Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

НапримСр, Ссли ΠΌΡ‹ Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ этот ΠΊΠΎΠ΄:

…и ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²ΠΎΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ:

…то Π±ΡƒΠ΄Π΅Ρ‚ синтаксичСская ошибка.

Π­Ρ‚ΠΎ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ²ΠΎΠ΄ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° ? вмСсто if .

ΠœΠ΅Ρ‚ΠΊΠΈ для break/continue

Π‘Ρ‹Π²Π°Π΅Ρ‚, Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Ρ†ΠΈΠΊΠ»Π° сразу.

НапримСр, Π² ΠΊΠΎΠ΄Π΅ Π½ΠΈΠΆΠ΅ ΠΌΡ‹ проходимся Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ ΠΏΠΎ i ΠΈ j , Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ prompt ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (i, j) с (0,0) Π΄ΠΎ (2,2) :

Нам Π½ΡƒΠΆΠ΅Π½ способ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ Π²Π²ΠΎΠ΄.

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ break послС input лишь ΠΏΡ€Π΅Ρ€Π²Ρ‘Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ», Π½ΠΎ этого нСдостаточно. Π”ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ повСдСния ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠΊ.

ΠœΠ΅Ρ‚ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° с Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ Ρ†ΠΈΠΊΠ»ΠΎΠΌ:

Π’Ρ‹Π·ΠΎΠ² break Π² Ρ†ΠΈΠΊΠ»Π΅ Π½ΠΈΠΆΠ΅ ΠΈΡ‰Π΅Ρ‚ блиТайший внСшний Ρ†ΠΈΠΊΠ» с Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π΅Π³ΠΎ ΠΊΠΎΠ½Π΅Ρ†.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ break outer Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΎΡ€Π²Π°Π½ внСшний Ρ†ΠΈΠΊΠ» Π΄ΠΎ ΠΌΠ΅Ρ‚ΠΊΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ outer , ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘Ρ‚ со строки, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠΉ (*) , ΠΊ alert(β€˜Π“ΠΎΡ‚ΠΎΠ²ΠΎ!’) .

МоТно Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС:

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° continue Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ. Π’ этом случаС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘Ρ‚ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ†ΠΈΠΊΠ»Π° с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ.

ΠœΠ΅Ρ‚ΠΊΠΈ Π½Π΅ Π΄Π°ΡŽΡ‚ возмоТности ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ мСсто ΠΊΠΎΠ΄Π°.

НапримСр, Π½Π΅Ρ‚ возмоТности ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’Ρ‹Π·ΠΎΠ² break/continue Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, ΠΈ ΠΌΠ΅Ρ‚ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π³Π΄Π΅-Ρ‚ΠΎ Π²Ρ‹ΡˆΠ΅ этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹.

Π˜Ρ‚ΠΎΠ³ΠΎ

ΠœΡ‹ рассмотрСли 3 Π²ΠΈΠ΄Π° Ρ†ΠΈΠΊΠ»ΠΎΠ²:

  • while – ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ условиС ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ.
  • do..while – ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ условиС послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.
  • for (;;) – ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ условиС ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ бСсконСчный Ρ†ΠΈΠΊΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ while (true) . ΠŸΡ€ΠΈ этом ΠΎΠ½, ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ†ΠΈΠΊΠ», ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ break .

Если Π½Π° Π΄Π°Π½Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° Π΄Π΅Π»Π°Ρ‚ΡŒ большС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» Π½Π΅ слСдуСт – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ continue .

ОбС этих Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ставятся ΠΏΠ΅Ρ€Π΅Π΄ Ρ†ΠΈΠΊΠ»ΠΎΠΌ. ΠœΠ΅Ρ‚ΠΊΠΈ – СдинствСнный способ для break/continue Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°, ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ внСшнСго.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€Ρ‹Π³Π½ΡƒΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ мСсто ΠΊΠΎΠ΄Π°, Π² JavaScript Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ возмоТности.

Π¦ΠΈΠΊΠ»Ρ‹ JavaScript ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ вычислСний. Они ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ процСсс написания ΠΊΠΎΠ΄Π°, выполняя ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ инструкций, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π°, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число Ρ€Π°Π· (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-счётчик) ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ условиС истинно. Π¦ΠΈΠΊΠ»Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠ±Ρ…ΠΎΠ΄ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠžΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° называСтся ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ.

На ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π° Π²Π»ΠΈΡΡŽΡ‚ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, выполняСмых Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Π’ JavaScript ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ†ΠΈΠΊΠ»Π°:

1) for ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Π΅Ρ‚Π΅, сколько Ρ€Π°Π· Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ;
2) for. in ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ±Ρ…ΠΎΠ΄Π° свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²;
3) while ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, сколько Ρ€Π°Π· Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ;
4) do. while Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ while . ΠžΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ do. while всСгда выполняСт Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π΄Π°ΠΆΠ΅ Ссли ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° условия Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false .

Π’ΠΈΠΏΡ‹ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² JavaScript, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠΌ

  • Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅:
  • 1. Π¦ΠΈΠΊΠ» for
  • 2. Π¦ΠΈΠΊΠ» for…in
  • 3. Π¦ΠΈΠΊΠ» while
  • 4. Π¦ΠΈΠΊΠ» do…while
  • 5. БСсконСчный Ρ†ΠΈΠΊΠ»
  • 6. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»
  • 7. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠΌ

1. Π¦ΠΈΠΊΠ» for

Π¦ΠΈΠΊΠ» for ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ элСмСнтам массивов ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… массивы, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ arguments ΠΈ HTMLCollection . УсловиС провСряСтся ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Ρ†ΠΈΠΊΠ»Π°. Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ выполняСтся ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° Π½Π΅ выполняСтся ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ нСпосрСдствСнно послС Ρ†ΠΈΠΊΠ»Π°.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ» Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° консоль строчку Hello, JavaScript! ΠΏΡΡ‚ΡŒ Ρ€Π°Π·.

Рис. 1. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ†ΠΈΠΊΠ»Π° for Π½Π° консоли

1.1. Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ†ΠΈΠΊΠ» for

Π¦ΠΈΠΊΠ» for состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

Π¨Π°Π³ 1. инициализация var i = 0; β€” объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-счётчика, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Π²ΠΎ врСмя выполнСния Ρ†ΠΈΠΊΠ»Π°. Π­Ρ‚Π° пСрСмСнная инициализируСтся со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0 . Π§Π°Ρ‰Π΅ всСго Π² качСствС счётчиков Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ i , j ΠΈ k .

Π¨Π°Π³ 2. ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° условия i β€” условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true , Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° (инструкция Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° условия ΠΈΠ΄Ρ‘Ρ‚ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счётчика мСньшС 5 .

Π¨Π°Π³ 3. Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π°Ρ опСрация i++ β€” опСрация приращСния счётчика, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ var i Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. ВмСсто ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ опСрация Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°.

По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ var i сохраняСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 . Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΡ‚ΠΎΠΊ Ρ†ΠΈΠΊΠ»Π° выполняСтся для for (var i = 1; i . УсловноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ вычисляСтся снова, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счётчика i всё Π΅Ρ‰Ρ‘ мСньшС 5 . Если это Ρ‚Π°ΠΊ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΅Ρ‰Ρ‘ Ρ€Π°Π·. Π—Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π°Ρ опСрация снова ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π¨Π°Π³ΠΈ 2 ΠΈ 3 ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° условиС i Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true .

1.2. Π’Ρ‹Π²ΠΎΠ΄ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива

Π§Ρ‚ΠΎΠ±Ρ‹ вывСсти значСния массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for , Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ свойство массива length . Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ количСство элСмСнтов Π² массивС ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ количСство Ρ€Π°Π·.

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ скрипт Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран ΠΏΡΡ‚ΡŒ сообщСний с названиями Ρ†Π²Π΅Ρ‚ΠΎΠ²:

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

2. Π¦ΠΈΠΊΠ» for. in

Π¦ΠΈΠΊΠ»Ρ‹ for. in ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΎΠ±Ρ…ΠΎΠ΄Π° свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ массивами. Π’Π°ΠΊΠΎΠΉ ΠΎΠ±Ρ…ΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ называСтся пСрСчислСниСм. ΠŸΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ hasOwnProperty() , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ унаслСдованы ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° создадим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Рис. 2. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ†ΠΈΠΊΠ»Π° for. in Π½Π° консоли

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² сцСнарии Π΄ΠΎ ΠΈΠ»ΠΈ послС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° user ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Object Π±Ρ‹Π» Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ clone() .

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° наслСдования ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° постоянно провСряСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Ρ‚ΠΎ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ автоматичСски ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ доступ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ.

Рис. 3. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ выполнСния Ρ†ΠΈΠΊΠ»Π° for. in Π½Π° консоли

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ обнаруТСния этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² процСссС пСрСчислСния свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° user , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ hasOwnProperty() , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ свойства ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°.

3. Π¦ΠΈΠΊΠ» while

Π¦ΠΈΠΊΠ» while β€” Ρ†ΠΈΠΊΠ» с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ условного выраТСния. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° (Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² случаС, Ссли условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ вычисляСтся Π² true . Если пСрвая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° даст Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ false , Π±Π»ΠΎΠΊ инструкций Π½Π΅ выполнится Π½ΠΈ Ρ€Π°Π·Ρƒ.

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡΡ‚ΡŒ провСряСтся Π½Π° ΠΈΡΡ‚ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ ΠΈ процСсс Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ вычислСно ΠΊΠ°ΠΊ false . Π’ этом случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ нСпосрСдствСнно послС Ρ†ΠΈΠΊΠ»Π° (Ссли таковая имССтся).

Π”Π°Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ умноТСния для числа 3:

Рис. 5. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ†ΠΈΠΊΠ»Π° while

4. Π¦ΠΈΠΊΠ» do. while

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

Рис. 6. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ†ΠΈΠΊΠ»Π° do. while

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π΄Π°ΠΆΠ΅ Ссли условиС Π½Π΅ выполняСтся.

5. БСсконСчныС Ρ†ΠΈΠΊΠ»Ρ‹

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

6. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹

Π¦ΠΈΠΊΠ» Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° называСтся Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» выполняСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for ΠΈ Ρ†ΠΈΠΊΠ»Π° while .

Рис. 7. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° for

7. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠΌ

Π¦ΠΈΠΊΠ»ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² break; ΠΈ continue; .

7.1. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break;

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break; Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Ρ†ΠΈΠΊΠ» Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π§Π°Ρ‰Π΅ всСго ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break; являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ конструкции if .

Когда ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break; ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π΅Π· ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΎΠ½ позволяСт Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ ΠΈΠ· инструкции switch . Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаётся счётчик, значСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚ 1 Π΄ΠΎ 99 , ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Ρ†ΠΈΠΊΠ» послС 14 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ.

Рис. 8. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° break Π² Ρ†ΠΈΠΊΠ»Π΅ for

Для Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break; ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΉ инструкции. ΠœΠ΅Ρ‚ΠΊΠ° позволяСт Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· любого Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°. ИмСнованной инструкциСй ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любая инструкция, внСшняя ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ break; . Π’ качСствС ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ имя инструкции if ΠΈΠ»ΠΈ имя Π±Π»ΠΎΠΊΠ° инструкций, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для присвоСния ΠΌΠ΅Ρ‚ΠΊΠΈ этому Π±Π»ΠΎΠΊΡƒ. ΠœΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом break; ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π΅ допускаСтся ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки.

7.2. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue;

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue; останавливаСт Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ†ΠΈΠΊΠ»Π° ΠΈ запускаСт Π½ΠΎΠ²ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ. ΠŸΡ€ΠΈ этом, Ρ†ΠΈΠΊΠ» while возвращаСтся нСпосрСдствСнно ΠΊ своСму ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, Π° Ρ†ΠΈΠΊΠ» for сначала вычисляСт Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°, Π° Π·Π°Ρ‚Π΅ΠΌ возвращаСтся ΠΊ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π° экран Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ всС Ρ‡Ρ‘Ρ‚Π½Ρ‹Π΅ числа:

Рис. 9. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° continue Π² Ρ†ΠΈΠΊΠ»Π΅ for

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue; Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π°Ρ… с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ.

Рис. 10. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° continue с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ

Π¦ΠΈΠΊΠ», ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° нСсколько Ρ€Π°Π·.

JavaScript Ρ†ΠΈΠΊΠ»Ρ‹

Π¦ΠΈΠΊΠ»Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Ρ‹, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ снова ΠΈ снова, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Часто это происходит ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами:

ВмСсто этого ΠΊΠΎΠ΄Π°:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»:

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Ρ†ΠΈΠΊΠ»ΠΎΠ²

JavaScript ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Ρ†ΠΈΠΊΠ»ΠΎΠ²:

  • for β€” Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° нСсколько Ρ€Π°Π·
  • for/in β€” Ρ†ΠΈΠΊΠ»Ρ‹ проходят Ρ‡Π΅Ρ€Π΅Π· свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
  • while β€” Ρ†ΠΈΠΊΠ»Ρ‹ проходят Ρ‡Π΅Ρ€Π΅Π· Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ условиС истинно
  • do/while β€” Ρ‚Π°ΠΊΠΆΠ΅ Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΊΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ условиС истинно

Π¦ΠΈΠΊΠ» for

Π¦ΠΈΠΊΠ» for ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

ЗаявлСниС 1 выполняСтся (ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·) ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°.

ЗаявлСниС 2 опрСдСляСт условиС выполнСния Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°.

ЗаявлСниС 3 выполняСтся (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·) послС выполнСния Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°.

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

ЗаявлСниС 2 опрСдСляСт условиС для выполнСния Ρ†ΠΈΠΊΠ»Π° i (я Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ мСньшС 5).

ЗаявлСниС 3 ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π² Ρ†ΠΈΠΊΠ»Π΅ i++ .

ЗаявлСниС 1

Π‘Π½Π°Ρ‡Π°Π»ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ заявлСниС 1 для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² Ρ†ΠΈΠΊΠ»Π΅ i = 0 .

Π­Ρ‚ΠΎ Π½Π΅ всСгда Ρ‚Π°ΠΊ, JavaScript Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚. ЗаявлСниС 1 являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² заявлСниС 1 (Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятой):

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

Если Π²Ρ‹ опуститС заявлСниС 2, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ break Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°. Π˜Π½Π°Ρ‡Π΅ пСтля Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ закончится. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ сбою Π’Π°ΡˆΠ΅Π³ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎ ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²Π°Ρ… Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ этого руководства.

ЗаявлСниС 3

Часто заявлСниС 3 ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π­Ρ‚ΠΎ Π½Π΅ всСгда Ρ‚Π°ΠΊ, JavaScript Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚, ΠΈ заявлСниС 3 являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

ЗаявлСниС 3 ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ iβ€” , ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ i = i + 15 ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅.

ЗаявлСниС 3 Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡƒΡ‰Π΅Π½ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°):

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

Π¦ΠΈΠΊΠ» for/in

JavaScript заявлСниС for/in ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

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

var text = «»;
var x;
for (x in person) <
text += person[x];
>

Π¦ΠΈΠΊΠ» while

Π¦ΠΈΠΊΠ» while ΠΈ do/while , Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ объяснСн Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΊ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΡŽ

JavaScript для Ρ†ΠΈΠΊΠ»Π°


Π¦ΠΈΠΊΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° нСсколько Ρ€Π°Π·.


Π¦ΠΈΠΊΠ»Ρ‹ JavaScript

Π¦ΠΈΠΊΠ»Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Ρ‹, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ снова ΠΈ снова, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ врСмя с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Часто Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами:

ВмСсто записи:

тСкст + = Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ [0] + Β«
Β»;
тСкст + = Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ [1] + Β«
Β»;
тСкст + = Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ [2] + Β«
Β»;
тСкст + = Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ [3] + Β«
Β»;
тСкст + = Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ [4] + Β«
Β»;
тСкст + = Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ [5] + Β«
Β»;

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

для (ΠΏΡƒΡΡ‚ΡŒ i = 0; i тСкст + = Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ [i] + «
«;
}

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ ΠΏΠ΅Ρ‚Π΅Π»ΡŒ

JavaScript ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Ρ†ΠΈΠΊΠ»ΠΎΠ²:

  • для — ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° нСсколько Ρ€Π°Π·
  • for / in — ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
  • для / ΠΈΠ· — ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· значСния повторяСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
  • Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ — цикличСски ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΊΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ условиС истинно
  • do / while — Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΊΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ условиС истинно

ΠŸΠ΅Ρ‚Π»Ρ For

Π¦ΠΈΠΊΠ» для ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

for ( ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 1 ; ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 2 ; ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 3 ) {
// Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½
}

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 1 выполняСтся (ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·) ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 2 опрСдСляСт условиС выполнСния Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 3 выполняСтся (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·) послС выполнСния Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°.

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

for (let i = 0; i <5; i ++) {
text + = «Π§ΠΈΡΠ»ΠΎ Ρ€Π°Π²Π½ΠΎ» + i + «
«;
}

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

Из ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 1 устанавливаСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄ запуском Ρ†ΠΈΠΊΠ»Π° (ΠΏΡƒΡΡ‚ΡŒ i = 0).

ЗаявлСниС 2 опрСдСляСт условиС для запуска Ρ†ΠΈΠΊΠ»Π° (i Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ мСньшС, Ρ‡Π΅ΠΌ 5).

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 3 ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (i ++) ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π² Ρ†ΠΈΠΊΠ»Π΅ Π±Ρ‹Π» ΠΊΠ°Π·Π½Π΅Π½.



ЗаявлСниС 1

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 1 для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² Ρ†ΠΈΠΊΠ»Π΅ (ΠΏΡƒΡΡ‚ΡŒ i = 0).

Π­Ρ‚ΠΎ Π½Π΅ всСгда Ρ‚Π°ΠΊ, JavaScript Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚. Π£Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ 1 ΠΏΠΎ ТСланию.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ 1 (Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ запятыми):

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

for (ΠΏΡƒΡΡ‚ΡŒ я = 0, len = cars.length, text = «»; я text + = cars [i] + «
«;
}

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

И Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 1 (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ваши значСния установлСны Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Ρ†ΠΈΠΊΠ»Π°):

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

ΠΏΡƒΡΡ‚ΡŒ i = 2;
ΠΏΡƒΡΡ‚ΡŒ Π»Π΅Π½ = Ρ‚Π°Ρ‡ΠΊΠΈ.Π΄Π»ΠΈΠ½Π°;
let text = «»;
для (; i text + = cars [i] + «
«;
}

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

ЗаявлСниС 2

Часто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 2 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ†Π΅Π½ΠΊΠΈ состояния исходной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π­Ρ‚ΠΎ Π½Π΅ всСгда Ρ‚Π°ΠΊ, JavaScript Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚. Π£Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ 2 Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Если ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 2 Π²Π΅Ρ€Π½Π΅Ρ‚ истину, Ρ†ΠΈΠΊΠ» начнСтся Π·Π°Π½ΠΎΠ²ΠΎ, Ссли ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ лоТь, Ρ†ΠΈΠΊΠ» закончится.

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


ЗаявлСниС 3

Часто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 3 ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π­Ρ‚ΠΎ Π½Π΅ всСгда Ρ‚Π°ΠΊ, JavaScript Π½Π΅ заботится, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 3 — это ΠΏΠΎ ТСланию.

ЗаявлСниС 3 ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ (i—), ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ (i = i + 15) ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅.

ЗаявлСниС 3 Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°):

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

ΠΏΡƒΡΡ‚ΡŒ i = 0;
ΠΏΡƒΡΡ‚ΡŒ Π»Π΅Π½ = Ρ‚Π°Ρ‡ΠΊΠΈ.Π΄Π»ΠΈΠ½Π°;
let text = «»;
для (; i text + = cars [i] + «
«;
i ++;
}

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€

ИспользованиС var Π² Ρ†ΠΈΠΊΠ»Π΅:

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

var i = 5;

for (var i = 0; i <10; i ++) {
// ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ΄
}

// Π—Π΄Π΅ΡΡŒ i Ρ€Π°Π²Π½ΠΎ 10

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ , помСститС Π² Ρ†ΠΈΠΊΠ»:

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

ΠΏΡƒΡΡ‚ΡŒ i = 5;

for (let i = 0; i <10; i ++) {
// ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ΄
}

// Π—Π΄Π΅ΡΡŒ i Ρ€Π°Π²Π½ΠΎ 5

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с использованиСм var пСрСмСнная, объявлСнная Π² Ρ†ΠΈΠΊΠ» ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π½Π΅ Ρ†ΠΈΠΊΠ»Π°.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ let , пСрСмСнная, объявлСнная Π² Ρ†ΠΈΠΊΠ» Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π½Π΅ Ρ†ΠΈΠΊΠ»Π°.

Когда let ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i Π² Ρ†ΠΈΠΊΠ»Π΅, i пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°.


Для / ΠΈΠ· ΠΈ для / Π² ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π°Ρ…

Π¦ΠΈΠΊΠ»Ρ‹ Β« для / Π²Ρ…ΠΎΠ΄Π°Β» ΠΈ «для / ΠΈΠ· Β» описаны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅.


Π¦ΠΈΠΊΠ»Ρ‹ ΠΏΠΎΠΊΠ°

Π¦ΠΈΠΊΠ» while ΠΈ do / while ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ….




для — JavaScript | MDN

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for создаСт Ρ†ΠΈΠΊΠ», состоящий ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… выраТСния, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ слСдуСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±Π»ΠΎΠΊ-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€) Π² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Ρ†ΠΈΠΊΠ»Π΅.

  для ([инициализация]; [условиС]; [ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅])
   ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅
  
инициализация

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ выраТСния присваивания) ΠΈΠ»ΠΈ объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΡ†Π΅Π½Π΅Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π°.ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ счСтчика. Π­Ρ‚ΠΎΡ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с var ΠΈΠ»ΠΈ ΠΏΡƒΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ с var , Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ для Ρ†ΠΈΠΊΠ», Ρ‚.Π΅. ΠΎΠ½ΠΈ находятся Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области, Ρ‡Ρ‚ΠΎ ΠΈ Ρ†ΠΈΠΊΠ» для . ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ с ΠΏΡƒΡΡ‚ΡŒ являСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ для утвСрТдСния.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого выраТСния отбрасываСтся.

состояниС

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Ρ†ΠΈΠΊΠ»Π°.Если это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ оцСниваСтся ΠΊΠ°ΠΊ истина, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ выполняСтся. Π­Ρ‚ΠΎ условноС тСст Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Если ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ, условиС всСгда оцСниваСтся ΠΊΠ°ΠΊ истинноС. Если Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π·Π° для конструкции .

ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

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

выписка

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся, ΠΏΠΎΠΊΠ° условиС истинно. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π±Π»ΠΎΠΊΠ° ( {...} ) для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ этих ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ пустой заявлСниС (; ).

ИспользованиС для

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ для начинаСтся с объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΊ 0 .Он провСряСт, Ρ‡Ρ‚ΠΎ i мСньшС дСвяти, выполняСт Π΄Π²Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ i Π½Π° 1 послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прохоТдСния Ρ†ΠΈΠΊΠ»Π°.

  для (let i = 0; i <9; i ++) {
   console.log (я);
   
}
  

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ для Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

ВсС Ρ‚Ρ€ΠΈ выраТСния Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ†ΠΈΠΊΠ»Π° for Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹.

НапримСр, Π² Π±Π»ΠΎΠΊΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ трСбуСтся ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

  var i = 0;
for (; я <9; я ++) {
    консоль.ΠΆΡƒΡ€Π½Π°Π» (я);
    
}
  

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

  для (let i = 0 ;; i ++) {
   console.log (я);
   Ссли (i> 3) ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²;
   
}
  

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ всС Ρ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ°. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ break ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ», Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ (ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ условиС для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° break Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ°.

  var i = 0;

для (;;) {
  Ссли (i> 3) ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²;
  console.log (я);
  i ++;
}
  

ИспользованиС for Π±Π΅Π· выписки

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ» для вычисляСт ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ смСщСния ΡƒΠ·Π»Π° Π² final-expression section, ΠΈ поэтому ΠΎΠ½ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Ρ€Π°Π·Π΄Π΅Π», вмСсто Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠ° с запятой.

  function showOffsetPos (sId) {

  var nLeft = 0, nTop = 0;

  для (

    var oItNode = Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.getElementById (sId);

    oItNode;

    nLeft + = oItNode.offsetLeft, nTop + = oItNode.offsetTop, oItNode = oItNode.offsetParent

  );

  console.log ('ПолоТСниС смСщСния элСмСнта \' '+ sId +' \ ': \ n left:' + nLeft + 'px; \ n top:' + nTop + 'px;');

}



showOffsetPos ('ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚');





  

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΡ… случаСв Π² JavaScript, Π³Π΄Π΅ Ρ‚ΠΎΡ‡ΠΊΠ° с запятой ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π° . Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π±Π΅Π· Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой строка, которая ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π° объявлСниСм Ρ†ΠΈΠΊΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ.

Π’Π°Π±Π»ΠΈΡ†Ρ‹ BCD Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅

ПониманиС JavaScript For ... of Loop - Scotch.io

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for ... of создаСт Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. Π¦ΠΈΠΊΠ» For ... of Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ Π² ES6 ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΠΊΠ°ΠΊ for..in , Ρ‚Π°ΠΊ ΠΈ forEach () ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ. For..of позволяСт Π²Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ массивы, строки, ΠΊΠ°Ρ€Ρ‚Ρ‹, Π½Π°Π±ΠΎΡ€Ρ‹ ΠΈ Ρ‚. Π”.

Бинтаксис

  для (повторяСмая пСрСмСнная) {
  ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅
}  
  • пСрСмСнная - для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
  • iterable - ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ пСрСчислимыС свойства ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования.

ΠœΠ°ΡΡΠΈΠ²Ρ‹

ΠœΠ°ΡΡΠΈΠ²Ρ‹ - это просто ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π²ΠΈΠ΄Π΅ списков. Π£ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° массива Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π°Π΄ Π½ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π°.Π’ΠΎΡ‚ для ... ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ массивом:

 
const iterable = ['ΠΌΠΈΠ½ΠΈ', 'ΠΌΠ°Π½ΠΈ', 'ΠΌΠΎ'];

for (const value of iterable) {
  console.log (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);
}




  

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ являСтся распСчатка ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния Π² ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ массивС .

Π”Π΅ΠΌΠΎ

: https://jsbin.com/dimahag/edit?js,console

ΠšΠ°Ρ€Ρ‚Π°

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Map содСрТит ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ значСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Map ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ элСмСнты Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ Π±Ρ‹Π» вставлСн.Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, for ... ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

 
const iterable = new Map ([['ΠΎΠ΄ΠΈΠ½', 1], ['Π΄Π²Π°', 2]]);

for (const [ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅] ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ) {
  console.log (`ΠšΠ»ΡŽΡ‡: $ {ΠΊΠ»ΡŽΡ‡} ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: $ {Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅}`);
}



  
Π”Π΅ΠΌΠΎ

: https://jsbin.com/lofewiw/edit?js,console

ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Set позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния любого Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ значСниями ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-Π½Π°Π±ΠΎΡ€Ρ‹ - это просто Π½Π°Π±ΠΎΡ€Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ элСмСнтов Π½Π°Π±ΠΎΡ€Π° основана Π½Π° порядкС вставки. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π½Π°Π±ΠΎΡ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли Π²Ρ‹ создаСтС Π½Π°Π±ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ элСмСнт Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π°, ΠΎΠ½ всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ элСмСнт.

 
const iterable = Π½ΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ([1, 1, 2, 2, 1]);

for (const value of iterable) {
  console.log (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);
}



  

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€, состоящий ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΈ Π΄Π²ΠΎΠ΅ΠΊ, Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 1 ΠΈ 2.

ΠΠ°Ρ‡Π°Ρ‚ΡŒ с JavaScript бСсплатно!

Π”Π΅ΠΌΠΎ: https: // jsbin.com / fajozob / edit? js, консоль

Π‘Ρ‚Ρ€ΠΎΠΊΠ°

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² тСкстовой Ρ„ΠΎΡ€ΠΌΠ΅.

 
const iterable = 'JavaScript';

for (const value of iterable) {
  console.log (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);
}











  

Π—Π΄Π΅ΡΡŒ выполняСтся итСрация строки, ΠΈ пСчатаСтся символ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ индСкса.

Π”Π΅ΠΌΠΎ

: https://jsbin.com/rixakeg/edit?js,console

АргумСнты ΠžΠ±ΡŠΠ΅ΠΊΡ‚

Π”ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° просто ΠΊΠ°ΠΊ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Ρ‚ΠΈΠΏΠ° Массив, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования:

 
function args () {
  for (const arg of arguments) {
    console.log (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚);
  }
}

args ('a', 'b', 'c');



  

Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсно, Ρ‡Ρ‚ΠΎ происходит ?! Как я сказал Ρ€Π°Π½Π΅Π΅, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ любой Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ args () ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π˜Ρ‚Π°ΠΊ, Ссли ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ 20 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ args (), Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ распСчатано 20 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π”Π΅ΠΌΠΎ

: https://jsbin.com/ciqabov/edit?js,console

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ - это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΉΡ‚ΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²ΠΎΠΉΡ‚ΠΈ.

 
Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ(){
  yield 1;
  Π²Ρ‹Ρ…ΠΎΠ΄ 2;
  Π²Ρ‹Ρ…ΠΎΠ΄ 3;
};

for (const g Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ()) {
  console.log (Π³);
}





  

Ѐункция * опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь.

Π”Π΅ΠΌΠΎ

: https://jsbin.com/faviyi/edit?js,console

JavaScript ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ извСстных ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния Ρ†ΠΈΠΊΠ»Π°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: break , continue , return ΠΈ throw .Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  const iterable = ['ΠΌΠΈΠ½ΠΈ', 'ΠΌΠ°Π½ΠΈ', 'ΠΌΠΎ'];

for (const value of iterable) {
  console.log (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);
  ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²;
}


  

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово break для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π° послС ΠΎΠ΄Π½ΠΎΠ³ΠΎ выполнСния, ΠΈ распСчатываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ mini .

Π”Π΅ΠΌΠΎ

: https://jsbin.com/tisuken/edit?js,console

Π¦ΠΈΠΊΠ» For ... of Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с итСрациями. ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ:

  const obj = {fname: 'foo', lname: 'bar'};

for (постоянноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ obj) {
    консоль.ΠΆΡƒΡ€Π½Π°Π» (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);
}  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ опрСдСляСм простой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ obj , ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π½Π° Π½Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ for ... of , ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ TypeError: obj [Symbol.iterator] Π½Π΅ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ .

Π”Π΅ΠΌΠΎ

: https://jsbin.com/sotidu/edit?js,console

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ массиву, Π² массив. Π£ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ свойство Π΄Π»ΠΈΠ½Ρ‹ , ΠΈ Π΅Π³ΠΎ элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ проиндСксирован. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

 
const obj = {length: 3, 0: 'foo', 1: 'bar', 2: 'baz'};

const array = Массив.ΠΈΠ· (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚);
for (постоянноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива) {
    console.log (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);
}



  

ΠœΠ΅Ρ‚ΠΎΠ΄ Array.from () создаСт Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Array ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ массиву ΠΈΠ»ΠΈ повторяСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π”Π΅ΠΌΠΎ

: https://jsbin.com/miwofin/edit?js,console

Π¦ΠΈΠΊΠ» for ... in Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС пСрСчислимыС свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

 
Array.prototype.newArr = () => {};
Array.prototype.anotherNewArr = () => {};
const array = ['foo', 'bar', 'baz'];

for (константноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² массивС) {
  консоль.ΠΆΡƒΡ€Π½Π°Π» (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);
}





  

For ... in Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрСчисляСт ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅ объявлСниС массива, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ‰Π΅Ρ‚ унаслСдованныС нСпСрСчислимыС свойства ΠΈΠ· ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° конструктора, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС newArr ΠΈ anotherNewArr , ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ распСчатываСт ΠΈΡ….

Π”Π΅ΠΌΠΎ

: https://jsbin.com/quxojof/edit?js,console

For ... of Π±ΠΎΠ»Π΅Π΅ спСцифичСн для ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ массивы ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½ΠΎ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π›ΡŽΠ±ΠΎΠΉ элСмСнт, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ символ .Бвойство ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ.

  Array.prototype.newArr = () => {};
const array = ['foo', 'bar', 'baz'];

for (постоянноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива) {
  console.log (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);
}



  

For ... of Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ нСпСрСчислимыС свойства ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° конструктора. Он просто ΠΈΡ‰Π΅Ρ‚ пСрСчислимыС свойства ΠΈ распСчатываСт ΠΈΡ….

Π”Π΅ΠΌΠΎ

: https://jsbin.com/sakado/edit?js,console

ИспользованиС For...of loop ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π²Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. НадСюсь, эта ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Π΅ конструкции Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π° JavaScript. Π£Π΄Π°Ρ‡Π½ΠΎΠ³ΠΎ кодирования!

ΠŸΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ эта ΡΡ‚Π°Ρ‚ΡŒΡ? ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ Π½Π° @orinamio_ Π² Twitter

Π¦ΠΈΠΊΠ» событий Node.js

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π¦ΠΈΠΊΠ» событий - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… аспСктов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΎ Node.js.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Ρ‚Π°ΠΊ Π²Π°ΠΆΠ½ΠΎ? ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΊΠ°ΠΊ Node.js ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ асинхронным ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄, ΠΈ поэтому ΠΎΠ½ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ Π² основном «убийствСнноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Β» Node.js, Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сдСлало Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ.

Код JavaScript Node.js выполняСтся Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ событиС.

Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½Π΅ бСспокоясь ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°.

Π’Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ свой ΠΊΠΎΠ΄, ΠΈ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ всСго, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ синхронных сСтСвых Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΠ»ΠΈ бСсконСчных Ρ†ΠΈΠΊΠ»ΠΎΠ².

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² сущСствуСт Ρ†ΠΈΠΊΠ» событий для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ появлСния Π²Π΅Π±-страницы с бСсконСчными Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ ΠΈΠ»ΠΈ тяТСлой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ вСсь Π±Ρ€Π°ΡƒΠ·Π΅Ρ€.

Π‘Ρ€Π΅Π΄Π° управляСт нСсколькими ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ событий, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² API. Π’Π΅Π±-Π²ΠΎΡ€ΠΊΠ΅Ρ€Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² собствСнном Ρ†ΠΈΠΊΠ»Π΅ событий.

Π’ основном Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ваш ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ событий, ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ этого, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° событий

Π›ΡŽΠ±ΠΎΠΉ ΠΊΠΎΠ΄ JavaScript, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ трСбуСтся слишком ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° управлСния Ρ†ΠΈΠΊΠ»Ρƒ событий, Π±ΡƒΠ΄Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ любого ΠΊΠΎΠ΄Π° JavaScript Π½Π° страницС, Π΄Π°ΠΆΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΌΡ‹ΡˆΡŒΡŽ, ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΈΡ‚Π΅ страницу страница ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

ΠŸΠΎΡ‡Ρ‚ΠΈ всС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π² JavaScript Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅. Π‘Π΅Ρ‚Π΅Π²Ρ‹Π΅ запросы, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой ΠΈ Ρ‚. Π”. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° - ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому JavaScript Ρ‚Π°ΠΊ сильно основан Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ…, Π° Π² послСднСС врСмя - Π½Π° обСщаниях ΠΈ async / await.

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² прСдставляСт собой стСк LIFO (послСдний вошСл, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅Π»).

Π¦ΠΈΠΊΠ» событий Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ провСряСт стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ какая-Π»ΠΈΠ±ΠΎ функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.

ΠŸΡ€ΠΈ этом ΠΎΠ½ добавляСт любой Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ выполняСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎ порядку.

Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ трассировку стСка ошибок, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π½Π°ΠΊΠΎΠΌΡ‹, Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ ΠΈΠ»ΠΈ Π² консоли Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°? Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ просматриваСт ΠΈΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π²Π°ΠΌ, какая функция ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ²:

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ объяснСниС Ρ†ΠΈΠΊΠ»Π° событий

Π”Π°Π²Π°ΠΉΡ‚Π΅ возьмСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΡ€ΠΈ запускС этого ΠΊΠΎΠ΄Π° сначала вызываСтся foo () .Π’Π½ΡƒΡ‚Ρ€ΠΈ foo () ΠΌΡ‹ сначала Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ bar () , Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ baz () .

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² выглядит Ρ‚Π°ΠΊ:

Π¦ΠΈΠΊΠ» событий Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ провСряСт, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΈ выполняСт это:

, ΠΏΠΎΠΊΠ° стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π½Π΅ опустССт.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ выглядит Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного: JavaScript Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для выполнСния, запускаСт ΠΈΡ… ΠΏΠΎ порядку.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° стСк Π½Π΅ очистится.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования setTimeout (() => {}, 0) - Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π΅, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ выполнятся всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΊΠΎΠ΄Π΅.

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ:

 

BASHcopy

foo

baz

bar

ΠŸΡ€ΠΈ запускС этого ΠΊΠΎΠ΄Π° вызываСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ foo (). Π’Π½ΡƒΡ‚Ρ€ΠΈ foo () ΠΌΡ‹ сначала Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ setTimeout, пСрСдавая bar Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΈ инструктируСм Π΅Π³ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ быстрСС, пСрСдавая 0 Π² качСствС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ baz ().

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² выглядит Ρ‚Π°ΠΊ:

Π’ΠΎΡ‚ порядок выполнСния всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:

ΠŸΠΎΡ‡Π΅ΠΌΡƒ это происходит?

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний

Когда вызываСтся setTimeout (), Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΈΠ»ΠΈ Node.js запускаСт Ρ‚Π°ΠΉΠΌΠ΅Ρ€. По истСчСнии Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС сразу послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ установили 0 Π² качСствС Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π°, функция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° помСщаСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний .

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний - это Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΎ мСсто, Π³Π΄Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ события, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ события Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΌΡ‹ΡˆΡŒΡŽ ΠΈΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ваш ΠΊΠΎΠ΄ смоТСт Π½Π° Π½ΠΈΡ… ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Или Ρ‚Π°ΠΊΠΆΠ΅ события DOM, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ onLoad .

Π¦ΠΈΠΊΠ» ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ стСку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΈ сначала ΠΎΠ½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС, Ρ‡Ρ‚ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π° ΠΊΠΎΠ³Π΄Π° Ρ‚Π°ΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅Ρ‚, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ΄Π±ΠΎΡ€Ρƒ Π²Π΅Ρ‰Π΅ΠΉ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний.

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

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π½ΠΈΠΉ ES6

Π’ ECMAScript 2015 прСдставлСна ​​концСпция ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΉ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ обСщаниями (Ρ‚Π°ΠΊΠΆΠ΅ прСдставлСнная Π² ES6 / ES2015). Π­Ρ‚ΠΎ способ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ скорСС Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ асинхронной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ† стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

ΠžΠ±Π΅Ρ‰Π°Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ сразу послС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

МнС нравится аналогия с ΠΏΠΎΠ΅Π·Π΄ΠΊΠΎΠΉ Π½Π° амСриканских Π³ΠΎΡ€ΠΊΠ°Ρ… Π² ΠΏΠ°Ρ€ΠΊΠ΅ Ρ€Π°Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΉ: ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ вас Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΏΠΎΠ·Π°Π΄ΠΈ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… людСй, Π³Π΄Π΅ Π²Π°ΠΌ придСтся ΠΆΠ΄Π°Ρ‚ΡŒ своСй ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π½ΠΈΠΉ - это ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΠΈΠ»Π΅Ρ‚ fastpass, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Π°ΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ΅Π·Π΄ΠΊΡƒ сразу послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π’ этом большая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Promises (ΠΈ Async / await, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ построСн Π½Π° обСщаниях) ΠΈ простыми старыми асинхронными функциями Ρ‡Π΅Ρ€Π΅Π· setTimeout () ΠΈΠ»ΠΈ API Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ.

НаконСц, Π²ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² для ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

Π›ΡƒΡ‡ΡˆΠΈΠ΅ Ρ†ΠΈΠΊΠ»Ρ‹ Π² JavaScript - БообщСство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²

Π’ этом постС ΠΌΡ‹ рассмотрим Ρ„ΠΎΡ€ΠΌΡ‹ Ρ†ΠΈΠΊΠ»Π° for, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ массива, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ простым ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ. Π­Ρ‚ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹ / ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² массивС ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅.

для Π² Ρ†ΠΈΠΊΠ»Π΅

Π’ этом Ρ†ΠΈΠΊΠ»Π΅ Π½Π΅Ρ‚ нСобходимости Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ индСксы массива ΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

  // итСрация ΠΏΠΎ массиву
ΠΏΡƒΡΡ‚ΡŒ arr = [1, 2, 3, 4, 5]
for (ΠΏΡƒΡΡ‚ΡŒ index in arr) {
  console.log (arr [индСкс])
}
// Π’Ρ‹Π²ΠΎΠ΄: 1,2,3,4,5

// ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
let obj = {id: 1, msg: 'hello'}
for (Π²Π²Π΅Π΄ΠΈΡ‚Π΅ obj) {
  console.log (obj [ΠΊΠ»ΡŽΡ‡])
}
// Π’Ρ‹Π²ΠΎΠ΄: 1, ΠΏΡ€ΠΈΠ²Π΅Ρ‚
  

для Ρ†ΠΈΠΊΠ»Π°

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот Ρ†ΠΈΠΊΠ», Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ индСксу. Π­Ρ‚ΠΎΡ‚ Ρ†ΠΈΠΊΠ» Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с массивами.

  для (let val of arr) {
  консоль.ΠΆΡƒΡ€Π½Π°Π» (val)
}
// Π’Ρ‹Π²ΠΎΠ΄: 1,2,3,4,5
  

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ массива

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

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ массиву

Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив.forEach () ΠΌΠ΅Ρ‚ΠΎΠ΄. For-each ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ выполняСт Π΅Π³ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива.

  // ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ индСкс ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
arr.forEach ((Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, индСкс) => console.log (`Index = $ {index} Value = $ {value}`))
  

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ массива

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ массив Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ array.map (). ΠœΠ΅Ρ‚ΠΎΠ΄ map () ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ массив. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π² Π½ΠΎΠ²ΠΎΠΌ массивС Π±ΡƒΠ΄ΡƒΡ‚ значСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ.

Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅ΡΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, имя. Π’Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ массив, содСрТащий Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹.

с Ρ†ΠΈΠΊΠ»ΠΎΠΌ for
  let data = [
  {id: 1, имя: 'Π’Π΅Π»Π΅Ρ„ΠΎΠ½', Ρ‚ΠΈΠΏ: 'элСктронный'},
  {id: 2, name: 'Laptop', type: 'electronic'},
  {id: 3, name: 'Shirt', type: 'clothing'},
]
ΠΏΡƒΡΡ‚ΡŒ ids = []
for (let i = 0; i  
с ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ
  ΠΏΡƒΡΡ‚ΡŒ ids = data.map (function (val) {
  Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ val.id
})
  
ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΊΠΎΡ€ΠΎΡ‡Π΅ ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ со стрСлкой
  ΠΏΡƒΡΡ‚ΡŒ ids = data.map (val => val.id)
  

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ элСмСнтов ΠΈΠ· массива

Для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ элСмСнтов массива ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ array.filter (). ΠœΠ΅Ρ‚ΠΎΠ΄ filter () ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, этот ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² массивС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ массив, содСрТащий ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ элСмСнты.Если функция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ истину для Π΄Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта, этот элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ Π² ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ массивС.

Π’Ρ‹Π±ΠΎΡ€ элСктронных ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ²
  let electronics = data.filter (item => item.type == 'electronic')
  

Поиск элСмСнта Π² массивС

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ элСмСнт Π² массивС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ array.find (). Как ΠΈ всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ обсуТдаСмыС здСсь ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Ѐункция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ истину ΠΈΠ»ΠΈ лоТь.ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ истину, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Если совпадСний Π½Π΅Ρ‚, функция Π²Π΅Ρ€Π½Π΅Ρ‚ undefined.

Поиск ΠΈΠΌΠ΅Π½ΠΈ "Π’Π΅Π»Π΅Ρ„ΠΎΠ½"
  data.find (val => val.name == 'Π’Π΅Π»Π΅Ρ„ΠΎΠ½')
  

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ СдинствСнного значСния ΠΈΠ· массива

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· массива, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ array.reduce (). ΠœΠ΅Ρ‚ΠΎΠ΄ reduce () ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.Π£ стаТёра ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π΅ΡΡ‚ΡŒ аккумулятор currentValue Π² качСствС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Accumulator содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ выполнСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, currentValue - это ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ элСмСнт массива.

Π‘ΡƒΠΌΠΌΠ° ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ массива
  ΠΏΡƒΡΡ‚ΡŒ arr = [1, 2, 3, 4, 5]

// сумма элСмСнтов массива
arr.reduce ((аккумулятор, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) => (аккумулятор + Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅), 0)
// Π³Π΄Π΅ 0 - Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
// Π’Ρ‹Π²ΠΎΠ΄: 15

// ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ элСмСнтов массива
ΠΎΠ±Ρ€.ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ((аккумулятор, currentValue) => (acc * currentValue), 1)
// Π’Ρ‹Π²ΠΎΠ΄: 120
  

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, выполняСтся Π»ΠΈ условиС хотя Π±Ρ‹ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта Π² массивС.

Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ array.some (). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Π΅Ρ€Π½Π΅Ρ‚ истину, Ссли условиС истинно хотя Π±Ρ‹ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта Π² массивС, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ лоТь.

  let friends = [13, 15, 16, 18] // возраст Π³Ρ€ΡƒΠΏΠΏΡ‹ Π΄Ρ€ΡƒΠ·Π΅ΠΉ

// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Ссли хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ… 18 ΠΈΠ»ΠΈ большС
Π΄Ρ€ΡƒΠ·ΡŒΡ.Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ (val => val> = 18)
  

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° выполнСния условия для всСх элСмСнтов Π² массивС

Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ array.every (). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Π΅Ρ€Π½Π΅Ρ‚ истину, Ссли условиС истинно для всСх элСмСнтов Π² массивС, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ лоТь.

  let giftPrices = [300, 350, 399, 400]
let budgetPerGift = 450

ΠΏΡƒΡΡ‚ΡŒ checkBudget = price => price <= budgetPerGift

giftPrices.every (checkBudget) // true

budgetPerGift = 300

giftPrices.every (checkBudget) // лоТь
  

Π’Π΅Ρ‰ΠΈ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ

  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ массива Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для Ρ†ΠΈΠΊΠ»Π° for, Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств, ΠΈ ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡΡ с измСнСниями Π² Π΄Π²ΠΈΠΆΠΊΠ°Ρ… JS.
  • ВсС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ обсуТдали Π²Ρ‹ΡˆΠ΅ (ΠΊΡ€ΠΎΠΌΠ΅ some (), find ()), Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ для всСго массива. Если Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ этого Π΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Π°ΠΌ Π½ΠΈ ΠΊ Ρ‡Π΅ΠΌΡƒ. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ break, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ².

На сСгодня всС.Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ большой ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π», просмотритС ΠΈΡ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ MDN, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΡ….

Если Π²Π°ΠΌ понравился этот пост, ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ΠΈΠΌ :).

Условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² JavaScript - УпраТнСния, ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, РСшСниС

УсловныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹ JavaScript [12 ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ с Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ]

[ Π’Π½ΠΈΠ·Ρƒ страницы доступСн Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ для написания ΠΈ выполнСния сцСнариСв.]

1. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° JavaScript, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Ρ†Π΅Π»Ρ‹Ρ… числа ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ большСС. ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€
Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

2. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ JavaScript, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π·Π½Π°ΠΊ произвСдСния Ρ‚Ρ€Π΅Ρ… чисСл. ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΠΊΠ½ΠΎ прСдупрСТдСния с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ. Π—Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€
НомСра ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ² : 3, -7, 2
Π’Ρ‹Ρ…ΠΎΠ΄ : Π—Π½Π°ΠΊ -
Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

3. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ JavaScript для сортировки Ρ‚Ρ€Π΅Ρ… чисСл. ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ ΠΎΠΊΠ½ΠΎ прСдупрСТдСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π—Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€
НомСра ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ² : 0, -1, 4
Π’Ρ‹Ρ…ΠΎΠ΄ : 4, 0, -1
Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

4. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ JavaScript, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ наибольшСС ΠΈΠ· пяти чисСл. ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ ΠΎΠΊΠ½ΠΎ прСдупрСТдСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π—Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€
НомСра ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ² : -5, -2, -6, 0, -1
Π’Ρ‹Ρ…ΠΎΠ΄ : 0
Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

5. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ†ΠΈΠΊΠ» for Π² JavaScript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ ΠΎΡ‚ 0 Π΄ΠΎ 15. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, являСтся Π»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ число Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ, ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ сообщСниС Π½Π° экранС. Π—Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°:
"0 Ρ‡Ρ‘Ρ‚Π½ΠΎ"
"1 нСчСтная"
"2 Ρ‡Π΅Ρ‚Π½Ρ‹Ρ…"
----------
----------
Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

6. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° JavaScript, которая вычисляСт срСдниС ΠΎΡ†Π΅Π½ΠΊΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ это срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ.Π—Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€

Имя студСнта ΠœΠ°Ρ€ΠΊΠΈ
Дэвид 80
Π’ΠΈΠ½ΠΎΡ‚ 77
Π”ΠΈΠ²ΡŒΡ 88
Π˜ΡΠΈΡ‚Π° 95
Вомас 68

ΠžΡ†Π΅Π½ΠΊΠΈ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠœΠ°Ρ€ΠΊΠ°
<60 F
<70 D
<80 Π‘
<90 B
<100 А

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

7. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° JavaScript, которая выполняСт ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ 100. Но для ΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… Ρ‚Ρ€Π΅ΠΌ Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Β«FizzΒ» вмСсто числа, Π° для ΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… пяти Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Β«BuzzΒ». Для чисСл, ΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… ΠΊΠ°ΠΊ ΠΈΠ· Ρ‚Ρ€Π΅Ρ…, Ρ‚Π°ΠΊ ΠΈ ΠΈΠ· пяти ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΎΠ² Β«FizzBuzzΒ». Π—Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€
Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

8. Богласно Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ счастливоС число опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ процСссом:
"Начиная с любого ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ число суммой ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² Π΅Π³ΠΎ Ρ†ΠΈΡ„Ρ€ ΠΈ повторяйтС процСсс Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° число Π½Π΅ станСт Ρ€Π°Π²Π½Ρ‹ΠΌ 1 (Π³Π΄Π΅ ΠΎΠ½ΠΎ останСтся), ΠΈΠ»ΠΈ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ бСсконСчно ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ 1.Π­Ρ‚ΠΈ числа для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… этот процСсс заканчиваСтся Π½Π° 1, ΡΠ²Π»ΡΡŽΡ‚ΡΡ счастливыми числами, Π° Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° 1, ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСсчастными числами (ΠΈΠ»ΠΈ грустными числами) ".
ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° JavaScript, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΈ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 5 счастливых чисСл. Π—Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€
Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

9. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° JavaScript, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ 3-Π·Π½Π°Ρ‡Π½Ρ‹Π΅ числа Армстронга. ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π’Ρ€Π΅Ρ…Π·Π½Π°Ρ‡Π½ΠΎΠ΅ число Армстронга являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом, сумма ΠΊΡƒΠ±ΠΈΠΊΠΎΠ² Π΅Π³ΠΎ Ρ†ΠΈΡ„Ρ€ Ρ€Π°Π²Π½Π° самому числу.НапримСр, 371 - это число Армстронга, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ 3 ** 3 + 7 ** 3 + 1 ** 3 = 371.
Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

10. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° JavaScript для построСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ шаблона, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» for. ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€

 *
* *
* * *
* * * *
* * * * *
 

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

11. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° JavaScript для вычислСния наибольшСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ дСлитСля (ΠΠžΠ”) Π΄Π²ΡƒΡ… ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ… чисСл. ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€
Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

12. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° JavaScript, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ 3 ΠΈ 5 Π΄ΠΎ 1000. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€
Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСня, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π•Ρ‰Π΅ Π½Π΅ всС!

* Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, Π½Π°Π²Π΅Π΄ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π½Π° панСль Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«ΠŸΠžΠ’Π’ΠžΠ Β». *

Живая дСмонстрация

Π‘ΠΌ. Pen javascript-common-editor ΠΎΡ‚ w3resource (@ w3resource) Π½Π° CodePen.

НС отправляйтС здСсь ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ внСсти свой Π²ΠΊΠ»Π°Π΄, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ страницу ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ.

JavaScript: совСты дня

Чистая функция

 function sum (a, b) {
  Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ a + b;
}
 

Чистая функция - это функция, которая всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.
Ѐункция суммы всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Если ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ 1 ΠΈ 2, ΠΎΠ½ всСгда Π²Π΅Ρ€Π½Π΅Ρ‚ 3 Π±Π΅Π· ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов.Если ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ 5 ΠΈ 10, ΠΎΠ½ всСгда Π²Π΅Ρ€Π½Π΅Ρ‚ 15 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ чистой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Бсылка: https://bit.ly/3jFRBje

JavaScript Loops 101 [Π‘Ρ‚Π°Ρ‚ΡŒΡ] [Π‘Ρ‚Π°Ρ‚ΡŒΡ]

Π’ JavaScript Π΅ΡΡ‚ΡŒ мноТСство способов зацикливания!

Как ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈ ΠΊΠΎΠ³Π΄Π°? Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΈΠ½Π½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² языкС.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим 7 самых популярных Ρ†ΠΈΠΊΠ»ΠΎΠ², рассказывая Π²Π°ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ….К ΠΊΠΎΠ½Ρ†Ρƒ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, ΠΊΠ°ΠΊΠΎΠΉ Ρ†ΠΈΠΊΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π― нашСл Π»ΡƒΡ‡ΡˆΠΈΠΉ способ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ‚Π»ΠΈ - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ смайлики. Π‘ΠΌΠ°ΠΉΠ»ΠΈΠΊ - это строка Π² Javascript, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив этих строк ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ массив ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ содСрТимоС массива. ΠœΡ‹ собираСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 7 Ρ‚ΠΈΠΏΠΎΠ² Ρ†ΠΈΠΊΠ»ΠΎΠ² для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° смайлов ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π½Π° консоль.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ‚Π΄Π°Ρ‡Ρƒ ΠΎΡ‚ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ массив, строка ΠΈ функция.

Если Π²Ρ‹ этого Π½Π΅ сдСлаСтС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Π½ΠΈΡ… здСсь.

Если Π΄Π°, Ρ‚ΠΎ приступим.

Для ΠΏΠ΅Ρ‚Π»ΠΈ

НачнСм с самого распространСнного ΠΈ самого старого Ρ†ΠΈΠΊΠ»Π° - Ρ†ΠΈΠΊΠ»Π° For. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит:

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅, Π² скобках ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Ρ‚Ρ€ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

  • ΠŸΡƒΡΡ‚ΡŒ i = 0; - Π­Ρ‚ΠΎ создаСт Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅. Β«IΒ» прСдставляСт индСкс, ΠΈ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для доступа ΠΊ смайликам Π² массивС.
  • я
  • i ++; - Π­Ρ‚ΠΎΡ‚ послСдний Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ являСтся сокращСниСм для увСличСния i. Π­Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ i = i + 1. Он Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ 1 ΠΊ Β«iΒ» Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅.

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ смайлик, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ смайлик Π½Π° консоль:

  • console.log (emojis [i]) - console.log - это Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ Π² консоль.Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ эмодзи, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ индСкс Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках.

Если Π²Ρ‹ запуститС этот ΠΊΠΎΠ΄, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π­Ρ‚ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» For Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ JavaScript. Π’Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ доступно Π² любом Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

Иногда Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ», ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ элСмСнт Π² массивС. Для этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Break.

ΠŸΠ΅Ρ€Π΅Ρ€Ρ‹Π²

Break остановит Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° For.Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π°ΠΉΡ‚ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² большом массивС. НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Π³Π΄Π΅ находится Ρ‡Π΅Ρ€Π΅ΠΏ Π² нашСм массивС, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ», ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ Π΅Π³ΠΎ.

Ну, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ сопоставим Ρ‡Π΅Ρ€Π΅ΠΏ, пСтля прСкращаСтся. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊΠΈΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° консоль? Π’ΠΎΡ‚ ΠΎΠ½:

Π§Ρ‚ΠΎ, Ссли Π±Ρ‹ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ со всСми значСниями Π² массивС, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ? Π’ этом случаС ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Continue.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ

Continue ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Break, Π½ΠΎ вмСсто остановки Ρ†ΠΈΠΊΠ»Π° ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Β«ΠΏΠ΅Ρ€Π΅ΠΏΡ€Ρ‹Π³Π½ΡƒΡ‚ΡŒΒ» элСмСнт Π² массивС.

На этот Ρ€Π°Π· ΠΌΡ‹ напишСм ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Ρ‡Π΅Ρ€Π΅ΠΏΠ° ΠΌΡ‹ пропускали Π΅Π³ΠΎ ΠΈ Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»ΠΈ Π½Π° консоль:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠ΄ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° этот Ρ€Π°Π· ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ Break Π½Π° Continue. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ:

Π§Π΅Ρ€Π΅ΠΏ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ оТидалось.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒΒ» для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ массива ΠΈ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ элСмСнтами.

Для..Π’

ΠœΡ‹ рассмотрСли Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ For, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ вСрсии. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» For..in для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° массива, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π­Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΊΠΎΠ΄, ΠΈ Π½Π΅Ρ‚ нСобходимости ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ индСкс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ΄Π° i ++. Π’Π°ΠΊ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ†ΠΈΠΊΠ» постоянно?

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с For..in.

Π’ΠΈΠ΄ΠΈΡ‚Π΅ Π»ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ встроСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Array.НапримСр, я ΠΌΠΎΠ³Ρƒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ для массива, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС ΠΊΠΎΠ΄, это Π²Ρ‹Π²ΠΎΠ΄:

Ѐункция `foo` являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π°! По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ For..in Π² своСм ΠΊΠΎΠ΄Π΅.

ΠœΡ‹ обсудили основныС Ρ†ΠΈΠΊΠ»Ρ‹ For - Π΄Π°Π»Π΅Π΅ ΠΌΡ‹ рассмотрим Ρ†ΠΈΠΊΠ»Ρ‹ While.

Пока Ρ†ΠΈΠΊΠ»

Π¦ΠΈΠΊΠ» «Пока» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ», ΠΏΠΎΠΊΠ° выполняСтся условиС.

НапримСр, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° Β«iΒ» мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива:

ΠœΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ For:

  • i = 0 - Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ индСксной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ присвоСниС Π΅ΠΉ значСния 0.
  • i
  • console.log (emojis [i]) - Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки эмодзи Π½Π° консоль.
  • i ++ - Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ индСкса Π½Π° 1 Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅.

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ распСчатаСт всС смайлы.

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» while вмСсто Ρ†ΠΈΠΊΠ»Π° For?

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ взаимозамСняСмы, Π² ΠΊΠΎΠ΄Π΅ JavaScript Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ часто Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ While. Но ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹. НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ находится смайлик лисы.ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ лису. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠΎΠ΄:

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ провСряСм условиС (noFox), ΠΈ Ссли ΠΎΠ½ΠΎ истинно, Ρ†ΠΈΠΊΠ» продолТаСтся. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ β€˜noFox’ Π±ΡƒΠ΄Π΅Ρ‚ установлСно Π² false, Ρ†ΠΈΠΊΠ» остановится. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break для Ρ†ΠΈΠΊΠ»Π° For, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ использовали Π²Ρ‹ΡˆΠ΅.

Π§Ρ‚ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ условиС послС Ρ†ΠΈΠΊΠ»Π°? Π§Ρ‚ΠΎ ΠΆ, Π² этом случаС Π²Π°ΠΌ понадобится Ρ†ΠΈΠΊΠ» Do / While.

Π¦ΠΈΠΊΠ» Do / While

Π­Ρ‚ΠΎΡ‚ Ρ†ΠΈΠΊΠ» ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ Ρ†ΠΈΠΊΠ»Ρƒ while, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° условий находится Π² ΠΊΠΎΠ½Ρ†Π΅.Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠΎΠ΄:

Код Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² этом ΠΏΠΎΡ‚ΠΎΠΊΠ΅:

  • Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ индСкс Π½Π° 0
  • РаспСчатайтС ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² массивС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ console.log
  • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 1 ΠΊ индСксу
  • Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ индСкс всС Π΅Ρ‰Π΅ мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива

ES5

ВсС Ρ†ΠΈΠΊΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ обсуТдали Π΄ΠΎ сих ΠΏΠΎΡ€, доступны Π² любой срСдС JavaScript. Если Π²Ρ‹ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚Π΅ΡΡŒ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.Π—Π° послСдниС нСсколько Π»Π΅Ρ‚ язык JavaScript Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ продвинулся Π²ΠΏΠ΅Ρ€Π΅Π΄. Доступны Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ΅Ρ‚Π»ΠΈ.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ измСнСния ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ Π² ES5, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ 5 JavaScript. НовыС ΠΏΠ΅Ρ‚Π»ΠΈ:

Для ΠΎΠ±Π΅ΠΈΡ… этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ массив. Для массива эмодзи это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

  • emojis.forEach ()
  • emojis.map ()

Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ES5 Π½Π° Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для своСго внСшнСго ΠΊΠΎΠ΄Π°.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

для каТдого

forEach - это функция, добавлСнная ΠΊ Ρ‚ΠΈΠΏΡƒ Array. Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, которая прСдставляСт собой Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния Π²Π½ΡƒΡ‚Ρ€ΠΈ массива Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π±Π»ΠΎΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π² скобках. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ способ создания Ρ†ΠΈΠΊΠ»ΠΎΠ² For Π² ES5.

Если доступСн forEach, Ρ‚ΠΎ это Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ способ создания Ρ†ΠΈΠΊΠ»Π°.

ΠšΠ°Ρ€Ρ‚Π°

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

ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Map Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив. Π­Ρ‚Π° функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ содСрТимоС ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. НапримСр, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив со всСми смайликами Π² Π²ΠΈΠ΄Π΅ Ρ‡Π΅Ρ€Π΅ΠΏΠΎΠ², ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот Ρ†ΠΈΠΊΠ», ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ. Π’ сочСтании с сокращСниСм это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ.

ES6

ПослСдний Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ рассмотрим, являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ES6.

Π­Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» For..of.

Π­Ρ‚ΠΎΡ‚ Ρ†ΠΈΠΊΠ» устраняСт нСдостатки Β«For..InΒ» ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ синтаксис ΠΊΠΎΠ΄Π°.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ ES6 ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ΡΡ, Π½ΠΎ IE Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отстаСт. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ For..of, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ IE.

Для..ΠΈΠ·

Как ΠΈ Ρ†ΠΈΠΊΠ» For..of, ΠΊΠΎΠ΄ выглядит Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ Π½Π΅ Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‡Ρ‚ΠΎ ΠΈ Ρ†ΠΈΠΊΠ» For..in. ВсС, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² массив, Π½Π΅ появится Π² Ρ†ΠΈΠΊΠ»Π΅.Если Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² срСдС ES6, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ†ΠΈΠΊΠ».

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠ² Javascript 101

ΠœΡ‹ рассмотрСли основныС Ρ†ΠΈΠΊΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Javascript.

Если Ρƒ вас Π½Π΅Ρ‚ ES5 ΠΈΠ»ΠΈ ES6, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» For ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ» While.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ES5, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ forEach ΠΈΠ»ΠΈ Map. Если Π²Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСдниС вСрсии Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ES6, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ For..of.

Π§Ρ‚ΠΎ Π±Ρ‹ Π²Ρ‹ Π½ΠΈ Π΄Π΅Π»Π°Π»ΠΈ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ For..Π²!


Об Π°Π²Ρ‚ΠΎΡ€Π΅: Π‘Ρ‚ΠΈΠ² Кип

Π‘Ρ‚ΠΈΠ² Кип (@pagedart) ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π» Π² ИВ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… дСсятилСтий, Π² основном ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Он энтузиаст Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ врСмя для создания сайтов с использованиСм Π½ΠΎΠ²Π΅ΠΉΡˆΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. Из Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Π²Π΅Ρ‰Π΅ΠΉ, ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств ΠΈ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° Π΅ΠΌΡƒ ΠΏΠΎΡΡ‡Π°ΡΡ‚Π»ΠΈΠ²ΠΈΠ»ΠΎΡΡŒ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со всСм этим.

ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

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

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