Functie()

Een functie is een container met codeverklaringen die kan worden opgeroepen met behulp van de haakjes () operator. Parameters kunnen tijdens het aanroepen binnen de haakjes worden gepasseerd, zodat de instructies in de functie toegang hebben tot bepaalde waarden wanneer de functie wordt aangeroepen.

In de volgende code maken we twee versies van een addNumbers function objectone using the nieuwe operator en een ander die het meer gebruikelijke letterlijke patroon gebruikt. Beiden verwachten twee parameters. In elk geval roepen we de functie aan, waarbij parameters tussen haakjes worden doorgegeven () operator.

Voorbeeld: sample76.html

 

Een functie kan worden gebruikt om een ​​waarde te retourneren, een object te construeren of als een mechanisme om eenvoudig code uit te voeren. JavaScript heeft verschillende functies voor functies, maar in de meest eenvoudige vorm is een functie eenvoudigweg een uniek bereik van uitvoerbare instructies.


Functie() parameters

De Functie() constructor neemt een onbepaald aantal parameters, maar de laatste parameter verwacht door de Functie() constructor is een string met instructies die de hoofdtekst van de functie bevatten. Alle parameters die vóór de laatste aan de constructor zijn doorgegeven, zijn beschikbaar voor de functie die wordt gemaakt. Het is ook mogelijk om meerdere parameters als een door komma's gescheiden string te verzenden.

In de volgende code contrasteer ik het gebruik van de Functie() constructor met de meer algemene patronen van het instantiëren van een functieobject.

Voorbeeld: sample77.html

 

Direct gebruik maken van de Functie() constructor wordt niet aanbevolen of wordt meestal alleen maar gedaan omdat JavaScript dit gebruikt eval () om de tekenreeks met de functielogica te ontleden. Velen overwegen eval () onnodige overheadkosten zijn. Als het in gebruik is, is een fout in het ontwerp van de code hoogst mogelijk.

De ... gebruiken Functie() constructeur zonder de nieuwe sleutelwoord heeft hetzelfde effect als alleen de constructor gebruiken om functieobjecten te maken (nieuwe functie ('x', 'return x') vs. functie (('x', 'return x')).

Er wordt geen sluiting gemaakt bij het oproepen van de Functie() constructor rechtstreeks.


Functie() Eigenschappen en methoden

Het functieobject heeft de volgende eigenschappen (exclusief overgenomen eigenschappen en methoden):

Eigenschappen (Function.prototype;):

  • prototype

Functie Object Instance Eigenschappen en methoden

Functieobjectinstanties hebben de volgende eigenschappen en methoden (exclusief overgenomen eigenschappen en methoden):

Instance-eigenschappen (var myFunction = function (x, y, z) ; myFunction.length;):

  • argumenten
  • bouwer
  • lengte

Exemplaarmethoden (var myFunction = function (x, y, z) ; myFunction.toString ();):

  • van toepassing zijn()
  • () aanroepen
  • toString ()

Functies Retourneer altijd een waarde

Hoewel het mogelijk is om een ​​functie te maken om eenvoudig codeverklaringen uit te voeren, is het ook heel gebruikelijk dat een functie een waarde retourneert. In het volgende voorbeeld geven we een tekenreeks uit de zeg gedag functie.

Voorbeeld: sample78.html

 

Als een functie geen retourwaarde opgeeft, onbepaald wordt teruggestuurd. In het volgende voorbeeld noemen we het gekef functie die de string 'yelp' naar de console registreert zonder expliciet een waarde terug te geven.

Voorbeeld: sample79.html

 

Het concept om hier weg te nemen is dat alle functies een waarde teruggeven, zelfs als u niet expliciet een waarde geeft om terug te keren. Als u geen waarde opgeeft om te retourneren, is de geretourneerde waarde onbepaald.


Functies zijn eersteklasburgers (niet alleen syntaxis, maar waarden)

In JavaScript zijn functies objecten. Dit betekent dat een functie kan worden opgeslagen in een variabele, array of object. Ook kan een functie worden doorgegeven aan en geretourneerd door een functie. Een functie heeft eigenschappen omdat het een object is. Al deze factoren maken functies eersteklasburgers in JavaScript.

Voorbeeld: sample80.html

 

Het is cruciaal dat je je realiseert dat een functie een object is, en dus een waarde. Het kan worden doorgegeven of vergroot zoals elke andere uitdrukking in JavaScript.


Parameters doorgeven aan een functie

Parameters zijn voertuigen om waarden door te geven in het bereik van een functie wanneer deze wordt opgeroepen. In het volgende voorbeeld roepen we aan addFunction (). Omdat we het vooraf hebben gedefinieerd om twee parameters te nemen, komen er twee toegevoegde waarden binnen de scope.

Voorbeeld: sample81.html

 

In tegenstelling tot sommige andere programmeertalen is het volkomen legaal in JavaScript om parameters weg te laten, zelfs als de functie is gedefinieerd om deze argumenten te accepteren. De ontbrekende parameters krijgen gewoon de waarde onbepaald. Natuurlijk, door waarden voor de parameters weg te laten, werkt de functie mogelijk niet goed.

Als u een functie onverwachte parameters doorgeeft (die niet zijn gedefinieerd toen de functie werd gemaakt), zal er geen fout optreden. En het is mogelijk om toegang te krijgen tot deze parameters van de argumenten object, dat beschikbaar is voor alle functies.


deze en argumenten Waarden zijn beschikbaar voor alle functies

Binnen het bereik en het lichaam van alle functies, de deze en argumenten waarden zijn beschikbaar.

De argumenten object is een arrayachtig object dat alle parameters bevat die aan de functie worden doorgegeven. In de volgende code kunnen we, hoewel we geen parameters opgeven bij het definiëren van de functie, vertrouwen op de argumenten array doorgegeven aan de functie om toegang te krijgen tot parameters als ze bij aanroep worden verzonden.

Voorbeeld: sample82.html

 

De deze sleutelwoord, doorgegeven aan alle functies, is een verwijzing naar het object dat de functie bevat. Zoals je zou verwachten, kunnen functies in objecten als eigenschappen (methoden) worden gebruikt deze om een ​​verwijzing naar het bovenliggende object te krijgen. Wanneer een functie is gedefinieerd in het globale bereik, is de waarde van deze is het globale object. Bekijk de volgende code en zorg dat u begrijpt wat deze komt terug.

Voorbeeld: voorbeeld83.html

 

De arguments.callee Eigendom

De argumenten object heeft een eigenschap genaamd callee, wat een verwijzing is naar de functie die momenteel wordt uitgevoerd. Deze eigenschap kan worden gebruikt om naar de functie te verwijzen vanuit het kader van de functie (arguments.callee) een zelfreferentie. In de volgende code gebruiken we deze eigenschap om een ​​verwijzing naar de aanroepfunctie te krijgen.

Voorbeeld: sample84.html

 

Dit kan handig zijn als een functie recursief moet worden aangeroepen.


De functie-instantie lengte Eigendom en arguments.length

De argumenten object heeft een uniek lengte eigendom. Hoewel je misschien denkt dat deze lengte-eigenschap je het aantal gedefinieerde argumenten zal geven, geeft het feitelijk het aantal parameters dat naar de functie is gestuurd gedurende het aanroepen.

Voorbeeld: sample85.html

 

De ... gebruiken lengte eigendom van iedereen Functie() In dergelijke gevallen kunnen we het totale aantal parameters dat de functie verwacht in beslag nemen.

Voorbeeld: sample86.html

 

De arguments.length eigenschap is verouderd in JavaScript 1.4, maar het aantal argumenten dat naar een functie is verzonden, is toegankelijk via de lengte eigenschap van het functieobject. Als u vooruit gaat, kunt u de lengtewaarde krijgen door gebruik te maken van de callee eigenschap om eerst de verwijzing te krijgen naar de functie die wordt opgeroepen (arguments.callee.length).


Functieparameters opnieuw definiëren

Een functieparameter kan binnen de functie opnieuw worden gedefinieerd, hetzij direct, of met behulp van de argumenten matrix. Bekijk deze code:

Voorbeeld: sample87.html

 

Merk op dat ik de waarde van de barparameter kan herdefiniëren met behulp van de argumenten index of door direct een nieuwe waarde toe te wijzen aan de parameter.


Een functie retourneren voordat deze is voltooid (functie-uitvoer annuleren)

Functies kunnen op elk moment tijdens het aanroepen worden geannuleerd met behulp van de terugkeer sleutelwoord met of zonder een waarde. In het volgende voorbeeld annuleren we de toevoegen functie als de parameters ongedefinieerd zijn of geen getal.

Voorbeeld: sample88.html

 

Het concept om hier afstand van te nemen is dat u de uitvoering van een functie kunt annuleren met behulp van de terugkeer sleutelwoord op elk punt in de uitvoering van de functie.


Een functie definiëren (verklaring, expressie of constructor)

Een functie kan op drie verschillende manieren worden gedefinieerd: een functieconstructor, een functie-instructie of een functie-uitdrukking. In het volgende voorbeeld demonstreer ik elke variatie.

Voorbeeld: sample89.html

 

Sommigen hebben gezegd dat er een vierde type definitie is voor functies, genaamd de "named function expression". Een benoemde functie-uitdrukking is eenvoudigweg een functie-uitdrukking die ook een naam bevat (bijv., var add = function add (x, y) return x + y).


Een functie oproepen (functie, methode, constructor of () aanroepen en van toepassing zijn())

Functies worden aangeroepen met behulp van vier verschillende scenario's of patronen.

  • Als een functie
  • Als een methode
  • Als een constructeur
  • Gebruik makend van van toepassing zijn() of () aanroepen

In het volgende voorbeeld onderzoeken we elk van deze aanroeppatronen.

Voorbeeld: sample90.html

 

Zorg ervoor dat u op de hoogte bent van alle vier de aanroeppatronen, omdat de code die u tegenkomt mogelijk een van deze bevat.


Anonieme functies

Een anonieme functie is een functie die geen ID krijgt. Anonieme functies worden meestal gebruikt voor het doorgeven van functies als parameter aan een andere functie.

Voorbeeld: sample91.html

 

Self-Invoking Function Expression

Een functie-expressie (eigenlijk elke functie behalve een die is gemaakt op basis van de Functie() constructor) kan na definitie direct worden opgeroepen met behulp van de operator haakjes. In het volgende voorbeeld maken we een zeg woord() functie-expressie en roep dan onmiddellijk de functie op. Dit wordt beschouwd als een zichzelf aanroepende functie.

Voorbeeld: sample92.html

 

Zelf-aanroepende anonieme functie-uitingen

Het is mogelijk om een ​​anonieme functie-instructie te maken die automatisch wordt aangeroepen. Dit wordt een zelfoproepende anonieme functie genoemd. In het volgende voorbeeld maken we verschillende anonieme functies die onmiddellijk worden aangeroepen.

Voorbeeld: sample93.html

 

Volgens de ECMAScript-standaard zijn de haakjes rond de functie (of iets dat de functie omzet in een uitdrukking) vereist als de functie onmiddellijk moet worden opgeroepen.


Functies kunnen worden genest

Functies kunnen voor onbepaalde tijd in andere functies worden genest. In het volgende codevoorbeeld kapselen we de goo functie binnen in de bar functie, die zich in de foo functie.

Voorbeeld: sample94.html

 

Het eenvoudige concept hier is dat functies kunnen worden genest en er is geen limiet aan hoe diep het nesten kan gaan.

Denk eraan, de waarde van deze voor geneste functies is het hoofdobject (de venster object in een webbrowser) in JavaScript 1.5, ECMA-262, Edition 3.


Doorgeven van functies naar functies en terugkerende functies van functies

Zoals eerder vermeld, zijn functies eersteklasburgers in JavaScript. En aangezien een functie een waarde is en een functie elke soort waarde kan worden doorgegeven, kan een functie aan een functie worden doorgegeven. Functies die andere functies aannemen en / of teruggeven, worden ook wel "hogere-orde-functies" genoemd.

In de volgende code geven we een anonieme functie door aan de foo functie die we dan meteen terughalen van de foo functie. Het is deze anonieme functie die de variabele is bar wijst op, sinds foo accepteert en retourneert vervolgens de anonieme functie.

Voorbeeld: sample95.html

 

Dus wanneer bar wordt aangeroepen, roept het de anonieme functie op die is doorgegeven aan de foo () functie, die vervolgens wordt doorgegeven vanaf de foo () functie en waarnaar wordt verwezen vanuit de bar variabel. Dit alles om te laten zien dat functies net als elke andere waarde kunnen worden doorgegeven.


Functieverklaringen aanroepen voordat ze worden gedefinieerd (ook wel functiehijswerk)

Een functie-instructie kan worden aangeroepen tijdens de uitvoering voor de eigenlijke definitie. Dit is een beetje vreemd, maar je moet je ervan bewust zijn, zodat je er gebruik van kunt maken, of op zijn minst weet wat er gebeurt als je het tegenkomt. In het volgende voorbeeld roep ik de sayYo () en som() functieverklaringen voordat ze worden gedefinieerd.

Voorbeeld: sample96.html

 

Dit gebeurt omdat voordat de code wordt uitgevoerd, functieverklaringen worden geïnterpreteerd en aan de uitvoeringsstapel / context worden toegevoegd. Zorg dat u hiervan op de hoogte bent als u functie-instructies gebruikt.

Functies die zijn gedefinieerd als functie-uitdrukkingen worden niet opgehesen. Alleen functieverklaringen worden gehesen.


Een functie kan zichzelf noemen (ook bekend als Recursion)

Het is volkomen legitiem dat een functie zichzelf roept. In feite wordt dit vaak gebruikt in bekende codeerpatronen. In de code die volgt, beginnen we met de countDownFrom functie, die zichzelf vervolgens via de functienaam oproept countDownFrom. In essentie creëert dit een lus die aftelt van 5 naar 0.

Voorbeeld: sample97.html

 

Je moet je ervan bewust zijn dat het normaal is dat een functie zichzelf oproept (ook wel recursie genoemd) of herhaaldelijk.


Conclusie

Functies zijn een van de meest gebruikte aspecten van JavaScript, hopelijk heb je nu een beter begrip van hoe je ze kunt gebruiken.