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 өзгөрбөйт