⊗jsPmFTFENIn 233 of 505 menu

Nyanser av funktionsuttryck i JavaScript

Namnet Function Expression är inte givet utan anledning. Det betyder verkligen det - att sådana funktioner är en del av något uttryck.

Till exempel kan vi lägga till någon sträng och en namnlös funktion:

let str = 'str' + function() {return 3;}; console.log(str); // visar 'strfunction() {return 3;}'

Varför ser vi ett sådant konstigt resultat, och inte siffran 3? Eftersom den andra termen är inte resultatet av funktionens arbete, utan dess ursprungliga kod (vi anropade trots aldrig denna funktion, vi bara skrev den).

Det vill säga, namnet funktionsuttryck betyder att en sådan funktion tar del i något uttryck.

Tilldelning till en variabel är också ett uttryck:

let func = function() { console.log('!'); };

Man kan också, till exempel, skicka en funktion som en parameter till console.log och den kommer att visa dess källkod i konsolen - det kommer också att räknas som ett uttryck:

console.log(function() {return 3;});

Varför är detta viktigt: för att skillnaden mellan Function Declaration och Function Expression är inte alls att den första funktionen skapas med ett namn, och den andra initialt inte har något namn. Det är inte så.

Exempel. Här har vi en funktion utan namn, men som samtidigt inte deltar i något uttryck (det vill säga, inga åtgärder utförs med den, enkelt uttryckt):

/* Denna funktion kommer att vara en Function Declaration, men med ett syntaktiskt fel: */ function() { console.log('!'); }

Sådan kod kommer generellt att ge ett fel! Varför: eftersom funktionen inte deltar i något uttryck, anser webbläsaren att den är en Function Declaration, men hittar inte dess namn och ger ett fel.

För att felet ska försvinna måste man göra så att funktionen blir en del av något uttryck. Till exempel, skriver vi operationen + före den:

+function() { // sådan kod är korrekt console.log('!'); };

Hur detta fungerar: själva operationen + gör ingenting, det är som att skriva istället för siffran 3 siffran +3 - tillåtet, men ändrar ingenting.

Men i fallet med en funktion - ändrar det. Nu är vår funktion inte bara skriven, utan deltar i ett uttryck. Därför blir det inget fel nu. Resultatet av att exekvera funktionen kommer inte heller, eftersom vi bara skrev den, men inte anropade den.

Istället för + kan man skriva vad som helst. Till exempel:

-function() { // sådan kod är korrekt console.log('!'); }; !function() { // sådan kod är korrekt console.log('!'); };

Man kan också sätta vår funktion inom runda parenteser, i det här fallet blir den också ett funktionsuttryck:

(function() { // sådan kod är korrekt console.log('!'); });

Avgör om den presenterade funktionen är Function Declaration eller Function Expression:

function func() { console.log('!'); }

Avgör om den presenterade funktionen är Function Declaration eller Function Expression:

let func = function() { console.log('!'); }

Avgör om den presenterade funktionen är Function Declaration eller Function Expression:

+function() { console.log('!'); }

Avgör om den presenterade funktionen är Function Declaration eller Function Expression:

!function func() { console.log('!'); }

Avgör om den presenterade funktionen är Function Declaration eller Function Expression:

-function func() { console.log('!'); }

Avgör om den presenterade funktionen är Function Declaration eller Function Expression:

1 + function func() { console.log('!'); }

Avgör om den presenterade funktionen är Function Declaration eller Function Expression:

(function func() { console.log('!'); })

Avgör om den presenterade funktionen är Function Declaration eller Function Expression:

console.log( function() { console.log('!'); } );
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