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 се не мења