Sobes.tech
Junior

Koja je razlika između klasične funkcije i funkcije sa strelicom u JavaScript-u?

sobes.tech АИ

Одговор од АИ

Основна разлика је у начину на који раде са this.

Класична функција има свој this, који се одређује контекстом позива (како је позвана).

Стрелна функција нема свој this. Лексички наследи this из окружења у којем је дефинисана.

Друге разлике:

  • arguments објекат: Класичне функције имају приступ arguments, стрелне — не (али можете користити rest-параметре).
  • Конструктори: Класичне функције могу да се користе као конструктори са оператором new. Стрелне функције — не.
  • prototype својство: Класичне функције имају својство prototype. Стрелне — не.

Пример рада са this:

// Пример са класичном функцијом
const obj = {
  name: 'Објекат',
  greet: function() {
    console.log(this.name); // this се односи на obj
  }
};

obj.greet(); // Исписа: Објекат

const greetFunc = obj.greet;
greetFunc(); // Исписа: undefined (или Window у браузеру) - this губи контекст obj
// Пример са стрелном функцијом
const objArrow = {
  name: 'Објекат са стрелком',
  greet: () => {
    console.log(this.name); // this наследи контекст споља (у овом случају global или Window)
  }
};

objArrow.greet(); // Исписа: undefined (или Име прозора у браузеру, ако је name дефинисано на глобалном нивоу)

const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // Исписа: undefined (или Име прозора у браузеру) - this се не мења