Pijlfuncties zijn compacter, maar wist je dat er nog een hele reeks andere verschillen zijn?

Functies zijn een essentieel onderdeel van JavaScript dat u moet gebruiken om herbruikbare code te schrijven. De twee belangrijkste typen functies zijn gewone functies en pijlfuncties, en er zijn veel manieren om ze te definiëren.

Hoewel ze vergelijkbare behoeften vervullen, hebben ze een paar kritieke verschillen die een fundamentele invloed kunnen hebben op hoe u ze in uw code gebruikt. Leer alles over verschillende verschillen tussen pijlfuncties en gewone functies.

1. Syntaxisverschillen

De syntaxis die u kiest bij het ontwikkelen van JavaScript-functies heeft een grote invloed op hoe eenvoudig het is om uw code te lezen en te begrijpen. De syntaxis van gewone en pijlfuncties verschilt aanzienlijk, wat van invloed is op hoe u ze schrijft en gebruikt.

JavaScript-pijlfuncties gebruik een kleinere taalstructuur die begrijpelijker is. U kunt ze gebruiken om functies te maken door ze te combineren tot één uitdrukking of instructie.

instagram viewer
const voeg toe = (een, b) => een + b;

In dit voorbeeld is de toevoegen functie accepteert twee ingangen, A En B,en retourneert hun totaal. De => teken definieert dit als een pijlfunctie.

Aan de andere kant vereist het definiëren van een reguliere functie het gebruik van de functie trefwoord, met een uitgebreidere syntaxis, zoals in dit voorbeeld:

functietoevoegen(een, b) {
opbrengst een + b;
}

In dit voorbeeld is de functie trefwoord definieert een reguliere functie die ook accolades gebruikt en de opbrengst stelling.

Reguliere functies zijn handiger voor complexe syntaxis waarvoor meerdere instructies of uitdrukkingen nodig zijn. Pijlfuncties gebruiken daarentegen een beknoptere syntaxis die uw code leesbaarder en begrijpelijker kan maken.

2. Bereiken van verschillen

De term "scoping" beschrijft hoe de interne variabelen en functies van een functie toegankelijk zijn. In JavaScript definieert en opent u variabelen en functies in uw hele code met behulp van scoping. Hun onderscheiden scoping kan een aanzienlijke invloed hebben op de manier waarop u JavaScript schrijft en gebruikt pijl en reguliere functies.

In scoping, hoe pijlfuncties omgaan met de dit trefwoord verschilt aanzienlijk van hoe normale functies doen. Reguliere functies definiëren de dit trefwoord zelf; daarom kan het veranderen afhankelijk van de context waarin u de functie aanroept.

Aan de andere kant, omdat ze het niet specificeren dit trefwoord, pijlfuncties gebruiken hetzelfde dit als de statische reikwijdte die hen omringt.

Bekijk het volgende voorbeeld om het verschil te zien. Laten we zeggen dat je een persoon bezwaar maken met een naam eigenschap en een methode genaamd zegNaam() die de naam van de persoon registreert met behulp van een reguliere functie:

const persoon = {
naam: 'John,'

zegNaam: functie() {
troosten.log(dit.naam);
}
};

persoon.zegNaam(); // logt 'Jan'

Hier is de normale functie sayName() een methode van het object person en de dit sleutelwoord binnen die functie verwijst naar dat persoonsobject.

Laten we nu hetzelfde proberen met een pijlfunctie:

const persoon = {
naam: 'John',

zegNaam: () => {
troosten.log(dit.naam);
}
};

persoon.zegNaam(); // logboeken ongedefinieerd

Omdat de pijlfunctie die wordt gebruikt in de zegNaam() methode definieert zichzelf niet dit trefwoord, het gebruikt de dit van de statische reikwijdte die het omringt. In dit geval is dat het globale bereik van de instantie.

Als gevolg hiervan, wanneer u belt persoon.sayName(), Jij krijgt ongedefinieerd liever dan "John." Dit kan een aanzienlijke invloed hebben op de manier waarop u functies in uw code schrijft en gebruikt.

3. Gebruik cases en best practices

Reguliere functies zijn beter geschikt voor functies die hun eigen functies nodig hebben dit trefwoord, zoals methoden in een object.

Pijlfuncties zijn beter geschikt voor functionele programmering en callbacks die niet nodig zijn dit trefwoord.

4. Functie bindende verschillen

Functiebinding is de term die wordt gebruikt om de relatie tussen te beschrijven dit trefwoord en functies in uw code. De variaties in functiebinding tussen pijlfuncties en normale functies kunnen een grote invloed hebben op de manier waarop u pijlfuncties construeert en gebruikt.

De... gebruiken dit trefwoord maakt het uniek in reguliere functies en associeert met verschillende objecten op basis van de methode die is gebruikt om de functie aan te roepen. Functiebinding is een van de belangrijkste verschillen tussen gewone en pijlfuncties.

Pijlfuncties hebben daarentegen geen dit trefwoord; ze halen het eerder uit de omliggende scopes.

Laten we naar een voorbeeld kijken om meer over dit verschil te begrijpen. Stel je hebt een persoon bezwaar maken met een naam veld en een methode genaamd zegNaam() die een reguliere functie gebruikt om de naam van de persoon op te nemen:

const persoon = {
naam: 'John',

zegNaam: functie() {
troosten.log(dit.naam);
}
};

const een anderePersoon = {
naam: 'Jane'
};

person.sayName.call (anotherPerson); // registreert 'Jane'

In dit voorbeeld noem je de person object's zegNaam() methode met de waarde een ander persoon de... gebruiken telefoongesprek() methode. Hierdoor is de zegNaam() methode, dit, trefwoord is gebonden aan de een ander persoon object, en het logt "Jane" liever dan "John."

Laten we nu hetzelfde gebruiken met een pijlfunctie:

const persoon = {
naam: 'John',

zegNaam: () => {
troosten.log(dit.naam);
}
};

const een anderePersoon = {
naam: 'Jane'
};

person.sayName.call (anotherPerson); // logboeken ongedefinieerd

Sinds de zegNaam() techniek geen eigen trefwoord heeft, gebruikt u in dit voorbeeld een pijlfunctie. In dit geval erft de pijlfunctie de eigenschappen van het omringende bereik, wat het globale bereik is.

Dit betekent dat wanneer je loopt person.sayName.call (anotherPerson), de pijlfunctie dit trefwoord blijft het globale object, en ongedefinieerd neemt de plaats in van Jane in het logboek.

Als u een functie aan een specific dit waarde, kan een gewone functie de voorkeur hebben. Als u echter geen functie hoeft te binden aan een specific dit waarde, kan een pijlfunctie korter en gemakkelijker te begrijpen zijn.

5. Impliciete terugkeer

Pijlfunctie heeft een impliciete retourfunctie. Als de hoofdtekst van de functie uit één enkele uitdrukking bestaat, geeft de functie die uitdrukking terug.

Als voorbeeld:

const dubbel = (X) => X * 2;

Deze pijlfunctie retourneert een verdubbeling van een parameter. U hoeft geen expliciet te gebruiken opbrengst trefwoord omdat de functie body maar één uitdrukking heeft.

6. Compatibiliteitsverschillen

Compatibiliteitsverschillen verwijzen naar de ECMAScript 6 toegevoegde pijlfuncties, die mogelijk niet werken met oudere browsers of omgevingen. Aan de andere kant bestaan ​​reguliere functies al sinds het begin van JavaScript en worden ze breed ondersteund.

Hier is een illustratie van een pijlfunctie die mogelijk niet werkt in meer gevestigde omstandigheden:

const voeg toe = (een, b) => een + b;

Het volgende is een vergelijkbare reguliere functie die in de meeste situaties zou moeten werken:

functietoevoegen(een, b) {
opbrengst een + b;
}

Gebruik gewone functies in plaats van pijlfuncties wanneer u zich richt op oudere omgevingen om compatibiliteit te garanderen. Pijlfuncties kunnen echter een syntaxis bieden die gemakkelijker te begrijpen en beknopter is bij het werken met moderne browsers en omgevingen.

Kiezen tussen pijlfuncties en reguliere functies in JavaScript

In JavaScript hebben pijl- en reguliere functies verschillende functies en toepassingen. Pijlfuncties hebben een eenvoudige syntaxis, overerven dit trefwoordterm uit de context van hun gebruik, terwijl reguliere functies meer aanpasbaar zijn en meer complexe situaties aankunnen.

Het is van cruciaal belang om te weten hoe ze verschillen en hoe u ze kunt gebruiken volgens de vereisten van uw code. Bij het selecteren van het soort functie dat u wilt gebruiken, moet u ook rekening houden met compatibiliteitsverschillen.

Uiteindelijk zijn de pijl en reguliere functies van JavaScript krachtige tools die u helpen schonere en efficiëntere code te schrijven.