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