Junior
Ի՞նչն է տարբերությունը սլաքային ֆունկցիաների և սովորական ֆունկցիաների միջև JavaScript-ում։
sobes.tech AI
Պատասխան AI-ից
- Սինտաքսիս:
- Ընդհանուր ֆունկցիա:
function myFunction() { ... } - Ուղղահայաց ֆունկցիա:
() => { ... }կամparam => { ... }
- Ընդհանուր ֆունկցիա:
thisկոնտեքստը:- Ընդհանուր ֆունկցիա:
this-ը որոշվում է կանչի կոնտեքստով: - Ուղղահայաց ֆունկցիա:
this-ը լեքսիկորեն ժառանգվում է շրջակա միջավայրից (չի ունի սեփականthis)։
- Ընդհանուր ֆունկցիա:
- Կառուցողներ:
- Ընդհանուր ֆունկցիա: Կարող է օգտագործվել որպես կառուցող (
new myFunction())։ - Ուղղահայաց ֆունկցիա: Չի կարող օգտագործվել որպես կառուցող։
- Ընդհանուր ֆունկցիա: Կարող է օգտագործվել որպես կառուցող (
argumentsօբյեկտ:- Ընդհանուր ֆունկցիա: Ունի սեփական
argumentsօբյեկտը։ - Ուղղահայաց ֆունկցիա: Չի ունի սեփական
arguments-ը, հասանելի է rest-պարամետրերով (...args)։
- Ընդհանուր ֆունկցիա: Ունի սեփական
- Անվանում ունեցող ֆունկցիաներ:
- Ընդհանուր ֆունկցիա: Կարող է լինել անվանված (
function myFunction() { ... })։ - Ուղղահայաց ֆունկցիա: Դեռևս անանուն է, նշանակվում է փոփոխականի միջոցով (
const myFunction = () => { ... })։
- Ընդհանուր ֆունկցիա: Կարող է լինել անվանված (
- Անհայտ վերադարձ (implicit return):
- Ընդհանուր ֆունկցիա: Պահանջում է բացահայտ
return-ը։ - Ուղղահայաց ֆունկցիա: Մի տողից բովանդակության դեպքում կարող է անանուն վերադարձնել արտահայտության արդյունքը։
- Ընդհանուր ֆունկցիա: Պահանջում է բացահայտ
Համեմատական աղյուսակ՝
| Գծանիշ | Ընդհանուր ֆունկցիա | Ուղղահայաց ֆունկցիա |
|---|---|---|
| Սինտաքսիս | function name() { ... } |
() => { ... } |
this կոնտեքստը |
Դինամիկ (կանչի կոնտեքստով) | Լեքսիկ (միջավայրից) |
| Կառուցող | Այո | Ոչ |
arguments օբյեկտը |
Այո | Ոչ (rest-պարամետրեր) |
| Անվանում ունեցողը | Կարող է լինել անվանված | Անանուն (նշանակվում է) |
| Անհայտ վերադարձ | Ոչ (հաճախ պահանջում է return) |
Այո (մեկ տողային բովանդակության համար) |
// Օրինակներ ընդհանուր ֆունկցիաների
function standardFunction() {
console.log(this); // Կախված է կանչի կոնտեքստից
console.log(arguments); // `arguments` օբյեկտը հասանելի է
}
const obj = {
method: standardFunction
};
standardFunction(); // this կլինի window կամ undefined
obj.method(); // this կլինի obj
new standardFunction(); // this կլինի նոր օբյեկտ
// Ուղղահայաց ֆունկցիաների օրինակներ
const arrowFunction = () => {
console.log(this); // Լեքսիկորեն ժառանգում է շրջակա միջավայրից
// console.log(arguments); // Գործողություն, սխալ, arguments հասանելի չէ
};
const outerObj = {
outerMethod: function() {
const innerArrowFunction = () => {
console.log(this); // ժառանգում է outerMethod-ից (outerObj)
};
innerArrowFunction();
}
};
arrowFunction(); // this կլինի window կամ {} (Node.js)
outerObj.outerMethod(); // this ներսում innerArrowFunction- ում կլինի outerObj
// Անհայտ վերադարձ ուղիղ ֆունկցիայում
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5
// Ընդհանուր ֆունկցիա՝ բացահայտ վերադարձով
function multiply(a, b) {
return a * b;
}
console.log(multiply(2, 3)); // 6
// Ուղղահայաց ֆունկցիա չի կարող լինել կոնստրուկտոր
// new arrowFunction(); // Սխալ: TypeError