Sobes.tech
Junior

Aký je rozdiel medzi šípkovými funkciami a bežnými funkciami v JavaScripte?

sobes.tech AI

Odpoveď od AI

  1. Syntax:
    • Bežná funkcia: function myFunction() { ... }
    • Šípová funkcia: () => { ... } alebo param => { ... }
  2. Kontext this:
    • Bežná funkcia: this je určené kontextom volania.
    • Šípová funkcia: this dedí lexikálne z okolia (nemá vlastný this).
  3. Konštruktory:
    • Bežná funkcia: Môže byť použitá ako konštruktor (new myFunction()).
    • Šípová funkcia: Nemôže byť použitá ako konštruktor.
  4. Objekt arguments:
    • Bežná funkcia: Má vlastný objekt arguments.
    • Šípová funkcia: Nemá vlastný arguments, prístup je cez rest parametre (...args).
  5. Meno funkcie:
    • Bežná funkcia: Môže byť pomenovaná (function myFunction() { ... }).
    • Šípová funkcia: Je anonymná, priradí sa premennej (const myFunction = () => { ... }).
  6. Implicitný návrat:
    • Bežná funkcia: Vyžaduje explicitný return.
    • Šípová funkcia: Pri jednoslovnom tele môže implicitne vracať výsledok výrazu.

Porovnávacia tabuľka:

Charakteristika Bežná funkcia Šípová funkcia
Syntaxe function name() { ... } () => { ... }
Kontext this Dynaický (volanie) Lexikálny (z rodičovského prostredia)
Konštruktor Áno Nie
Objekt arguments Áno Nie (používa rest parametre)
Meno funkcie Môže byť pomenovaná Anonymná (priradzuje sa)
Implicitný návrat Nie (zvyčajne vyžaduje return) Áno (pre jednoslovné telo)
// Príklady bežných funkcií
function standardFunction() {
  console.log(this); // Závisí od kontextu volania
  console.log(arguments); // Objekt arguments je dostupný
}

const obj = {
  method: standardFunction
};

standardFunction(); // this bude window alebo undefined
obj.method(); // this bude obj
new standardFunction(); // this bude nový objekt

// Príklady šípových funkcií
const arrowFunction = () => {
  console.log(this); // Dedi z okolia
  // console.log(arguments); // Chyba, arguments nie je dostupný
};

const outerObj = {
  outerMethod: function() {
    const innerArrowFunction = () => {
      console.log(this); // Dedi z outerMethod (outerObj)
    };
    innerArrowFunction();
  }
};

arrowFunction(); // this bude window alebo {} (v Node.js)
outerObj.outerMethod(); // this v innerArrowFunction bude outerObj

// Implicitný návrat v šípovej funkcii
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5

// Obecná funkcia s explicitným návratom
function multiply(a, b) {
  return a * b;
}
console.log(multiply(2, 3)); // 6

// Šípová funkcia nemôže byť konštruktor
// new arrowFunction(); // Chyba: TypeError