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-ին
  }
};

obj.greet(); // Տպում է՝ Օբյեկտ

const greetFunc = obj.greet;
greetFunc(); // Տպում է՝ undefined (կամ Window բրաուզերում) - this-ը կորցնում է կոնտեքստը
// Ստրելային ֆունկցիայի օրինակ
const objArrow = {
  name: 'Ստրելային օբյեկտ',
  greet: () => {
    console.log(this.name); // this-ը ժառանգում է արտաքին կոնտեքստից (այս դեպքում global կամ Window)
  }
};

objArrow.greet(); // Տպում է՝ undefined (կամ Windows-ի անունը, եթե այն սահմանված է)

const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // Տպում է՝ undefined (կամ Windows-ի անունը) - this-ը չի փոխվում