⊗jsPmFCPf 272 of 505 menu

IIFE:n sudenkuopat JavaScriptissä

Tarkastellaan kahta koodinpätkää.

Ensimmäinen:

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

Toinen:

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

Nämä kaksi koodinpätkää ovat lähes identtisiä, mutta jos ne suoritetaan - tulos on erilainen. Ensimmäinen koodi tulostaa konsoliin numeron 3, kun taas toinen - numeron 1.

Miksi tällaista eroa syntyy: kyse on siitä, että yhdessä tapauksessa ensimmäisen rivin lopussa ei ole puolipistettä, kun taas toisessa tapauksessa - on.

Saattaa kysyä: kuinka niin, eihän JavaScriptissä puolipiste komennon lopussa ole pakollinen! Itse asiassa näin ei ole aivan tottta. Selvitetään, mitä todella tapahtuu.

Ensimmäinen koodi voidaan kirjoittaa uudelleen näin:

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

Nyt käy heti selväksi, että ykköseen lisätään funktion paikan päällä kutsunnan tulos eli 2. Siksi lopullinen tulos on 3.

Jos ykkösen jälkeen laitetaan puolipiste, koodi tulkitaan tulkin eri tavalla:

// Ensimmäinen komento: let result = 1; // Toinen komento: +function() { return 2; }(); // Kolmas komento: console.log(result); // tulostaa 1

Eli muuttujaan sijoitus ja funktion paikan päällä kutsuminen tulevat eri komennoiksi. Ja kaikki puolipisteen takia!

Osoittautuu, että tässä tapauksessa funktion paikan päällä kutsuminen ei yleensä tee mitään - yksinkertaisesti tyhjään palauttaa numeron 2, joka ei vaikuta muuttujaan result millään tavalla.

Selvitetään sitten, miksi voimme yleensä olla kirjoittamatta puolipistettä JavaScriptissä. Olkoon meillä tällainen koodi ilman puolipisteitä:

let result = 1 // resultiin kirjoitetaan 1 let test = 2 // testiin kirjoitetaan 2

Se toimii oikein, koska tulkkia asioi itse kunkin rivin lopussa puolipisteen.

Mutta katsokaa tällaista koodia:

let result = 1 + 2; // resultiin kirjoitetaan 3

Nyt puolipistettä ensimmäisen rivin lopussa ei aseteta automaattisesti, koska tulkkia ymmärtää, että toisen rivin komento on osa ensimmäisen rivin komentoa.

Mutta jos asetamme itse puolipisteen - tulos on aivan toinen:

let result = 1; // resultiin kirjoitetaan 1 + 2; // komento ei tee mitään, mutta virhettäkään ei tule

Osoittautuu, että tulkkia asettaa itse puolipisteen, vain jos seuraava komento ei ole osa edellistä.

Ja katsokaa tätä koodia:

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

Todellakin, toinen rivi on yksinkertaisesti jatkoa ensimmäisen rivin komennolle ja tulkkia ei aseta puolipistettä automaattisesti. Juuri siksi, jos kirjoitamme itse pisteen ensimmäisen rivin lopussa - tulos on aivan toinen. Tämä kertoo, että on parasta aina asettaa puolipiste tarvittaviin paikkoihin, ongelmien välttämiseksi.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää