Sobes.tech
Junior

Mis vahe on klassikalise funktsiooni ja noolefunktsiooni vahel JavaScriptis?

sobes.tech AI

Vastus AI-lt

Peamine erinevus seisneb selles, kuidas nad töötavad this-ga.

Klassikaline funktsioon omab oma this, mis määratakse selle kutsumise konteksti järgi (kuidas see kutsuti).

Noolefunktsioonil ei ole oma this. See pärib leksikaalselt this sellest keskkonnast, kus see määratleti.

Teised erinevused:

  • arguments objekt: Klassikalistel funktsioonidel on juurdepääs arguments-le, noolefunktsioonidel — ei (aga saab kasutada rest-parameetreid).
  • Konstruktorid: Klassikalisi funktsioone saab kasutada konstruktoritena koos new-ga. Noolefunktsioonid — ei.
  • prototype omadus: Klassikalistel funktsioonidel on prototype. Noolefunktsioonidel — ei.

Näide this-ga töötamisest:

// Näide klassikalise funktsiooniga
const obj = {
  name: 'Objekt',
  greet: function() {
    console.log(this.name); // this viitab obj-ile
  }
};

obj.greet(); // Väljund: Objekt

const greetFunc = obj.greet;
greetFunc(); // Väljund: undefined (või Window brauseris) - this kaotab konteksti
// Näide noolefunktsiooniga
const objArrow = {
  name: 'Noolega objekt',
  greet: () => {
    console.log(this.name); // this pärib välisest kontekstist (antud juhul global või Window)
  }
};

objArrow.greet(); // Väljund: undefined (või Window nimi brauseris, kui see on määratletud)

const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // Väljund: undefined (või Window nimi) - this ei muutu