Junior
Фарқи байни функсияҳои ишора ва функсияҳои оддӣ дар JavaScript чист?
sobes.tech AI
Ҷавоб аз AI
- Синтаксис:
- Обикновена функция:
function myFunction() { ... } - Стрелкова функция:
() => { ... }илиparam => { ... }
- Обикновена функция:
- Контекст
this:- Обикновена функция:
thisсе определя от контекста на извикване. - Стрелкова функция:
thisсе лексикално наследи от околната среда (няма собственthis).
- Обикновена функция:
- Конструктори:
- Обикновена функция: Може да се използва като конструктор (
new myFunction()). - Стрелкова функция: Не може да се използва като конструктор.
- Обикновена функция: Може да се използва като конструктор (
- Обект
arguments:- Обикновена функция: Има собствен обект
arguments. - Стрелкова функция: Няма собствен
arguments, достъпът е чрез rest параметри (...args).
- Обикновена функция: Има собствен обект
- Именовани функции:
- Обикновена функция: Може да бъде именована (
function myFunction() { ... }). - Стрелкова функция: По подразбиране е анонимна, присвоява се на променлива (
const myFunction = () => { ... }).
- Обикновена функция: Може да бъде именована (
- Неявен връщане:
- Обикновена функция: Изисква явно
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