⊗jsPmFCPf 272 of 505 menu

IIFE kļūdu iespējas JavaScript

Apskatīsim divus koda fragmentus.

Pirmais:

let result = 1 +function() { return 2; }(); console.log(result);

Otrais:

let result = 1; +function() { return 2; }(); console.log(result);

Šie divi koda fragmenti ir gandrīz identiski, bet, tos palaidot, rezultāts atšķirsies. Pirmais kods izvadīs konsolē skaitli 3, bet otrais - skaitli 1.

Kāpēc radās šāda atšķirība: visa lieta ir tajā, ka vienā gadījumā pirmās rindas beigās trūkst semikols, bet otrajā gadījumā - tas ir.

Jūs varat jautāt: kā tas var būt, jo JavaScript semikols komandas beigās nav obligāts! Patiesībā tas nav gluži tā. Izpratīsim, kas mums patiesībā notiek.

Pirmo kodu var pārrakstīt šādi:

let result = 1 + function() { return 2; }(); console.log(result); // izvadīs 3

Tagad uzreiz kļūst skaidrs, ka pie vieninieka tiek pieskaitīts funkcijas izsaukšanas uzreiz rezultāts, tas ir 2. Tāpēc gala rezultāts būs 3.

Ja pēc vieninieka ieliek semikolu, tad kods tiks interpretētāja uztverts citādi:

// Pirmā komanda: let result = 1; // Otrā komanda: +function() { return 2; }(); // Trešā komanda: console.log(result); // izvadīs 1

Tas ir, piešķiršana mainīgajā un funkcijas izsaukšana uzreiz kļūs par atšķirīgām komandām. Un tas viss semikola klātbūtnes dēļ!

Izrādās, ka šajā gadījumā funkcijas izsaukšana uzreiz nemaz neko nedara - vienkārši nekur neko neatgriež, skaitli 2, kas nekādā veidā neietekmē mainīgo result.

Tad sapratīsim, kāpēc mēs vispār varam nerakstīt semikolu JavaScript. Lai mums ir šāds kods bez semikoliem:

let result = 1 // result tiks ierakstīts 1 let test = 2 // test tiks ierakstīts 2

Tas darbojas korekti, jo interpretētājs pats katras rindas beigās ievietoja semikolu.

Bet apskatieties uz šādu kodu:

let result = 1 + 2; // result tiks ierakstīts 3

Tagad semikols pirmās rindas beigās netiks automātiski ielikts, jo interpretētājs saprot, ka otrās rindas komanda ir pirmās rindas komandas daļa.

Bet, ja mēs paši ieliksim semikolu, rezultāts būs pavisam cits:

let result = 1; // result tiks ierakstīts 1 + 2; // komanda neko nedara, bet arī kļūdas nebūs

Izrādās, ka interpretētājs pats liek semikolu tikai tad, ja nākamā komanda nav iepriekšējās daļa.

Un tagad apskatieties uz šo kodu:

let result = 1 +function() { return 2; }(); console.log(result);

Patiešām, otrā rinda - vienkārši turpinājums pirmās rindas komandai un interpretētājs neliek semikolu automātiski. Tieši tāpēc, ja mēs paši ierakstīsim semikolu pirmās rindas beigās - rezultāts būs pavisam cits. Tas norāda, ka vislabāk vienmēr ielikt semikolu vajadzīgajās vietās, lai izvairītos no problēmām.

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt