Hvornår de ikke skal bruges og hvorfor

Funktioner i JavaScript er førsteklasses borgere eller førsteklasses objekter, Det betyder, at vi kan gøre ting som at sende dem som en parameter i en funktion eller returnere dem som et resultat af at udføre en funktion.

Du kan læse mere om funktioner her:

Jeg vil forklare, hvad en anonym funktion (AF) er med kode:

Så en AF er en funktion, der ikke er gemt i en variabel eller har et navn, der er erklæret efter “function”-identifikatoren.

Hvornår skal man ikke bruge dem

Det første problem med AF’er er, at de ikke har noget navn, en temmelig dum aclaration, men for udviklere er navnet på en variabel, klasse eller metode den vigtigste dokumentation, vi har om ansvar og adfærd for den pågældende variabel, klasse eller metode. Et dårligt navn kan give os mulighed for at begå en masse fejltagelser, f.eks. at forvente at en funktion returnerer noget, når den faktiske kode udskriver noget i konsollen og returnerer void, f.eks. hvis vi havde navngivet vores “funcionResultPrinter” med noget som “functionResultGetter”.

Så første øjeblik hvor vi ikke behøver at bruge anonyme funktioner er når vi har brug for et beskrivende navn, og det sker generelt set aldrig.

Det andet problem er at AF’er deklareres og gemmes i hukommelsen i runtime. Det betyder, at hver gang en AF udføres, vil den tage en anden plads i hukommelsen, og det kan øge den nødvendige beregningskraft til den del af koden.

Lad os lave et andet eksempel med kode:

I det eksempel har vi en AF med næsten ingen beregningsindsats, men vi kan lave tungt arbejde på en funktion for at få det, vi har brug for, og det kan forbruge en masse ressourcer fra vores server eller fra klientens browser.

Løsningen er at navngive funktionen:

Endlig lad os lave nogle benchmark:

Optagelse

Vi har to tilfælde, hvor vi skal undgå brugen af anonyme funktioner:

  1. Når funktionen har brug for et beskrivende navn.
  2. Når vi har brug for at bruger en funktion, der har brug for meget beregningskraft.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.