Sobes.tech
Junior

Mis vahe on noolefunktsioonidel ja tavalistel funktsioonidel JavaScriptis?

sobes.tech AI

Vastus AI-lt

  1. Süntaks:
    • Tavaline funktsioon: function myFunction() { ... }
    • Noolefunktsioon: () => { ... } või param => { ... }
  2. this kontekst:
    • Tavaline funktsioon: this määratakse kutsumise konteksti järgi.
    • Noolefunktsioon: this pärandub leksikaalselt ümbritsevast vahemikust (ei oma this).
  3. Konstruktorid:
    • Tavaline funktsioon: saab kasutada konstruktorina (new myFunction()).
    • Noolefunktsioon: ei saa kasutada konstruktorina.
  4. arguments objekt:
    • Tavaline funktsioon: omab oma arguments objekti, mis sisaldab edastatud argumente.
    • Noolefunktsioon: ei oma arguments objekti, juurdepääs argumentidele toimub rest-parameetrite (...args) kaudu.
  5. Nimetatud funktsioonid:
    • Tavaline funktsioon: võib olla nimetatud (function myFunction() { ... }).
    • Noolefunktsioon: vaikimisi anonüümne, määratakse muutuja kaudu nimeks (const myFunction = () => { ... }).
  6. Nimeta tagasikutsumine:
    • Tavaline funktsioon: nõuab selget return kasutamist väärtuse tagastamiseks (välja arvatud lihtsate juhtumite puhul, nagu IIFE).
    • Noolefunktsioon: ühe rea keha puhul võib automaatselt tagastada väljendi tulemust ilma return-ita.

Võrdlustabel:

Omadus Tavaline funktsioon Noolefunktsioon
Süntaks function name() { ... } () => { ... }
this kontekst Dynaamiline (kutsumise kontekst) Leksikaalne (vanemal alal)
Konstruktor Jah Ei
arguments objekti Jah Ei (kasutades rest-parameetreid)
Nimetus Võib olla nimetatud Nimetu (määratakse muutuja kaudu)
Nimeta tagasikutsumine Ei (tavaliselt nõutav return) Jah (ühe rea keha puhul)
// Tavaliste funktsioonide näited
function standardFunction() {
  console.log(this); // sõltub kutsumise kontekstist
  console.log(arguments); // kättesaadav arguments objekt
}

const obj = {
  method: standardFunction
};

standardFunction(); // this on window (brauseris) või undefined (strict mode)
obj.method(); // this on obj
new standardFunction(); // this on uus objekti eksemplar

// Noolefunktsioonide näited
const arrowFunction = () => {
  console.log(this); // pärineb vanemalt alalt (nt. Globaalne või moodul)
  // console.log(arguments); // viga, arguments pole kättesaadav
};

const outerObj = {
  outerMethod: function() {
    const innerArrowFunction = () => {
      console.log(this); // pärineb outerMethod-ist (mis on outerObj)
    };
    innerArrowFunction();
  }
};

arrowFunction(); // this on window (brauseris) või {} (Node.js)
outerObj.outerMethod(); // this innerArrowFunction-i sees on outerObj

// Nimetu tagasikutsumine noolefunktsioonis
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5 (automaatne tagasivõtt a + b)

// Tavaline funktsioon selge tagasivõtuga
function multiply(a, b) {
  return a * b;
}
console.log(multiply(2, 3)); // 6

// Noolefunktsioon ei saa olla konstruktor
// new arrowFunction(); // viga: TypeError: arrowFunction_1 is not a constructor