Sobes.tech
Junior

Kuo skiriasi rodyklės funkcijos nuo įprastų funkcijų JavaScript?

sobes.tech AI

Atsakymas iš AI

  1. Sintekse:
    • Įprasta funkcija: function myFunction() { ... }
    • Arrow funkcija: () => { ... } arba param => { ... }
  2. this kontekstas:
    • Įprasta funkcija: this nustatomas iškvietimo kontekstu.
    • Arrow funkcija: this semantiškai paveldima iš aplinkos srities (neturi savo this).
  3. Konstruktoriai:
    • Įprasta funkcija: gali būti naudojama kaip konstruktorius (new myFunction()).
    • Arrow funkcija: negali būti naudojama kaip konstruktorius.
  4. arguments objektas:
    • Įprasta funkcija: turi savo arguments objektą, kuriame yra perduoti argumentai.
    • Arrow funkcija: neturi savo arguments objekto, prieiga prie argumentų vykdoma per rest parametrus (...args).
  5. Pavadintos funkcijos:
    • Įprasta funkcija: gali būti pavadinta (function myFunction() { ... }).
    • Arrow funkcija: numatytai yra anonimė, priskiriama kintamajam pavadinimui (const myFunction = () => { ... }).
  6. Nematomas grąžinimas:
    • Įprasta funkcija: reikalauja aiškaus return naudojimo grąžinti reikšmę (išskyrus paprastus atvejus, kaip IIFE).
    • Arrow funkcija: vieno sakinio kūne gali neaiškiai grąžinti išraiškos rezultatą be return.

Lentelė palyginimui:

Savybė Įprasta funkcija Arrow funkcija
Sintaksė function name() { ... } () => { ... }
this kontekstas Dinamiškas (kvietimo kontekstas) Leksikinis (tėvų srities)
Konstruktorius Taip Ne
arguments objektas Taip Ne (naudojant rest parametrus)
Pavadinimas Gali būti pavadinta Nėra pavadinta (priskiriama)
Nematomas grąžinimas Ne (reikalauja return) Taip (vieno sakinio kūne)
// Pavyzdžiai įprastų funkcijų
function standardFunction() {
  console.log(this); // Priklauso nuo kvietimo konteksto
  console.log(arguments); // Pasiekiamas arguments objektas
}

const obj = {
  method: standardFunction
};

standardFunction(); // this bus window (naršyklėje) arba undefined (strict mode)
obj.method(); // this bus obj
new standardFunction(); // this bus naujas objekto standartinė funkcija

// Pavyzdžiai arrow funkcijų
const arrowFunction = () => {
  console.log(this); // Paveldi this iš tėvų srities (pvz., Global arba modulio)
  // console.log(arguments); // Klaida, arguments nėra pasiekiamas
};

const outerObj = {
  outerMethod: function() {
    const innerArrowFunction = () => {
      console.log(this); // Paveldi this iš outerMethod (kuris yra outerObj)
    };
    innerArrowFunction();
  }
};

arrowFunction(); // this bus window (naršyklėje) arba {} (Node.js)
outerObj.outerMethod(); // this viduje innerArrowFunction bus outerObj

// Nematomas grąžinimas arrow funkcijoje
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5 (nemažina `return` išraiškos)

// Įprasta funkcija su aiškiu grąžinimu
function multiply(a, b) {
  return a * b;
}
console.log(multiply(2, 3)); // 6

// Arrow funkcija negali būti konstruktorius
// new arrowFunction(); // Klaida: TypeError: arrowFunction_1 is not a constructor