⊗jsPmFCPf 272 of 505 menu

Fallgropar med IIFE i JavaScript

Låt oss titta på två kodstycken.

Första:

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

Andra:

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

Dessa två kodstycken är nästan identiska, men om de exekveras så blir resultatet annorlunda. Den första koden skriver ut talet 3 i konsolen, medan den andra skriver ut talet 1.

Anledningen till denna skillnad: allt handlar om att i det ena fallet saknas semikolon i slutet av den första raden, medan i det andra fallet finns det.

Du kanske frågar: hur kan det komma sig, eftersom semikolon i JavaScript i slutet av ett uttryck inte är obligatoriskt! Egentligen stämmer det inte helt. Låt oss ta reda på vad som verkligen händer.

Den första koden kan skrivas om så här:

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

Nu blir det direkt uppenbart att ettan adderas med resultatet från funktionsanropet på plats, det vill säga 2. Därför blir det slutgiltiga resultatet 3.

Om man däremot sätter ett semikolon efter ettan, kommer koden att uppfattas annorlunda av tolken:

// Första uttrycket: let result = 1; // Andra uttrycket: +function() { return 2; }(); // Tredje uttrycket: console.log(result); // skriver ut 1

Det vill säga, tilldelningen till variabeln och anropet av funktionen på plats blir separata uttryck. Och allt på grund av närvaron av ett semikolon!

Det visar sig att i detta fall gör funktionsanropet på plats ingenting som helst - den returnerar bara talet 2 till ingenstans, vilket inte påverkar variabeln result på något sätt.

Låt oss då ta reda på varför vi överhuvudtaget kan låta bli att skriva semikolon i JavaScript. Anta att vi har en sådan här kod utan semikolon:

let result = 1 // i result skrivs 1 in let test = 2 // i test skrivs 2 in

Den fungerar korrekt, eftersom tolken själv satte semikolon i slutet av varje rad.

Men titta på den här koden:

let result = 1 + 2; // i result skrivs 3 in

Nu sätts inte semikolon automatiskt i slutet av den första raden, eftersom tolken förstår att uttrycket på den andra raden är en del av uttrycket på den första raden.

Men om vi sätter semikolon själva - blir resultatet helt annorlunda:

let result = 1; // i result skrivs 1 in + 2; // uttrycket gör ingenting, men det blir inget fel heller

Det visar sig att tolken själv sätter semikolon, men bara om nästa uttryck inte är en del av det föregående.

Och titta nu på den här koden:

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

Ja, den andra raden är bara en fortsättning på uttrycket från den första raden och tolken sätter inte semikolon automatiskt. Det är därför, om vi själva skriver semikolon i slutet av den första raden, blir resultatet helt annorlunda. Detta talar för att det är bäst att alltid sätta semikolon på de ställen där det behövs, för att undvika problem.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa