Sobes.tech
Junior

Kāda ir atšķirība starp bultiņas funkcijām un parastajām funkcijām JavaScript?

sobes.tech AI

Atbilde no AI

  1. Sintakse:
    • Parasta funkcija: function myFunction() { ... }
    • Arrow funkcija: () => { ... } vai param => { ... }
  2. this konteksts:
    • Parasta funkcija: this tiek definēts izsaukuma kontekstā.
    • Arrow funkcija: this lexikāli mantojas no apkārtējās skatāmas vides (nav sava this).
  3. Konstruktori:
    • Parasta funkcija: var tikt izmantota kā konstruktors (new myFunction()).
    • Arrow funkcija: nevar tikt izmantota kā konstruktors.
  4. arguments objekts:
    • Parasta funkcija: tai ir savs arguments objekts, kas satur nodotos argumentus.
    • Arrow funkcija: tai nav sava arguments objekta, piekļuve argumentiem notiek caur rest parametrus (...args).
  5. Nosauktas funkcijas:
    • Parasta funkcija: var būt nosaukta (function myFunction() { ... }).
    • Arrow funkcija: pēc noklusējuma ir anonīma, piešķirta mainīgajam nosaukuma dēļ (const myFunction = () => { ... }).
  6. Netiešais atgrieziens:
    • Parasta funkcija: prasa skaidru return izmantošanu, lai atgrieztu vērtību (izņemot vienkāršus gadījumus, piemēram, IIFE).
    • Arrow funkcija: vienas rindas ķermenī var netieši atgriezt izteiksmes rezultātu bez return.

Salīdzināšanas tabula:

Raksturlielums Parasta funkcija Arrow funkcija
Sintakse function name() { ... } () => { ... }
this konteksts Dinamisks (izsaukšanas konteksts) Leksikāls (mātes apgabals)
Konstruktors
arguments objekts Nē (izmanto rest parametrus)
Nosaukums Var būt nosaukts Nav nosaukts (piešķirts)
Netiešais atgrieziens Nē (parasti nepieciešams return) Jā (viena rindas ķermenī)
// Parastu funkciju piemēri
function standardFunction() {
  console.log(this); // Atkarīgs no izsaukšanas konteksta
  console.log(arguments); // Pieejams arguments objekts
}

const obj = {
  method: standardFunction
};

standardFunction(); // this būs window (pārlūkā) vai undefined (stingrā režīmā)
obj.method(); // this būs obj
new standardFunction(); // this būs jauns objekta instances

// Arrow funkciju piemēri
const arrowFunction = () => {
  console.log(this); // Manto no vecā apgabala (piem., Globālais vai modulis)
  // console.log(arguments); // Kļūda, arguments nav pieejams
};

const outerObj = {
  outerMethod: function() {
    const innerArrowFunction = () => {
      console.log(this); // Manto no outerMethod (kas ir outerObj)
    };
    innerArrowFunction();
  }
};

arrowFunction(); // this būs window (pārlūkā) vai {} (Node.js)
outerObj.outerMethod(); // this iekšā innerArrowFunction būs outerObj

// Netiešais atgrieziens arrow funkcijā
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5 (netiešais atgrieziens a + b)

// Parasta funkcija ar skaidru atgriešanu
function multiply(a, b) {
  return a * b;
}
console.log(multiply(2, 3)); // 6

// Arrow funkcija nevar būt konstruktors
// new arrowFunction(); // Kļūda: TypeError: arrowFunction_1 is not a constructor