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 არ იცვლება