Sobes.tech
Junior

Kāda ir atšķirība starp klasisko funkciju un bultiņas funkciju JavaScript?

sobes.tech AI

Atbilde no AI

Galvenā atšķirība ir tā, kā viņi strādā ar this.

Klasiskā funkcija ir ar savu this, kas tiek noteikts tās izsaukšanas kontekstā (kā tā tika izsaukta).

Lēciskā funkcija nav ar savu this. Tā leksiski manto this no apkārtējās vides, kurā tā tika definēta.

Citas atšķirības:

  • arguments objekts: Klasiskās funkcijas piekļūst arguments, lēciskās — nē (bet var izmantot rest parametrus).
  • Konstruktoru funkcijas: Klasiskās funkcijas var tikt izmantotas kā konstruktoru ar new. Lēciskās — nē.
  • prototype īpašība: Klasiskās funkcijas ir ar prototype. Lēciskās — nē.

Piemērs ar this darbu:

// Ar klasiskās funkcijas piemēru
const obj = {
  name: 'Objekts',
  greet: function() {
    console.log(this.name); // this atsaucas uz obj
  }
};

obj.greet(); // Izvadīs: Objekts

const greetFunc = obj.greet;
greetFunc(); // Izvadīs: undefined (vai Window pārlūkprogrammā) - this zaudē kontekstu
// Ar lēciskās funkcijas piemēru
const objArrow = {
  name: 'Lēciskā objekts',
  greet: () => {
    console.log(this.name); // this manto no ārējā konteksta (šajā gadījumā global vai Window)
  }
};

objArrow.greet(); // Izvadīs: undefined (vai Window nosaukumu pārlūkprogrammā, ja tas ir definēts)

const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // Izvadīs: undefined (vai Window nosaukumu) - this nemainās