Sobes.tech
Junior

Фарқи байни функсияи классикӣ ва функсияи тире дар JavaScript чист?

sobes.tech AI

Ҷавоб аз AI

Негізгі айырмашылық — олар this жұмысында.

Классикалық функция өзінің this қасиетіне ие, ол оның шақырылу контекстіне байланысты анықталады.

Стрелка функциясының өз this қасиеті жоқ. Ол лексикалық түрде анықталған ортаның this мәнін мұраға алады.

Басқа айырмашылықтар:

  • arguments объектісі: Классикалық функциялар arguments объектісіне қол жеткізе алады, ал стрелка функциялары — жоқ (бірақ rest-параметрлерді қолдануға болады).
  • Конструкторлар: Классикалық функциялар new операторымен конструктор ретінде қолданылуы мүмкін. Стрелка функциялары — жоқ.
  • prototype қасиеті: Классикалық функциялардың prototype қасиеті бар. Стрелка функцияларында жоқ.

this жұмысын көрсету мысалы:

// Классикалық функция мысалы
const obj = {
  name: 'Объект',
  greet: function() {
    console.log(this.name); // this — объектке сілтеме
  }
};

obj.greet(); // Нәтиже: Объект

const greetFunc = obj.greet;
greetFunc(); // Нәтиже: undefined (немесе браузерде Window) — this контекстін жоғалтады
// Стрелка функциясы мысалы
const objArrow = {
  name: 'Объект стрелкамен',
  greet: () => {
    console.log(this.name); // this сыртқы контекстті мұраға алады (бұл жағдайда global немесе Window)
  }
};

objArrow.greet(); // Нәтиже: undefined (немесе браузердегі терезе аты, егер ол анықталса)

const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // Нәтиже: undefined (немесе браузердегі терезе аты) — this өзгермейді