Junior
Aký je rozdiel medzi šípkovými funkciami a bežnými funkciami v JavaScripte?
sobes.tech AI
Odpoveď od AI
- Syntax:
- Bežná funkcia:
function myFunction() { ... } - Šípová funkcia:
() => { ... }aleboparam => { ... }
- Bežná funkcia:
- Kontext
this:- Bežná funkcia:
thisje určené kontextom volania. - Šípová funkcia:
thisdedí lexikálne z okolia (nemá vlastnýthis).
- Bežná funkcia:
- Konštruktory:
- Bežná funkcia: Môže byť použitá ako konštruktor (
new myFunction()). - Šípová funkcia: Nemôže byť použitá ako konštruktor.
- Bežná funkcia: Môže byť použitá ako konštruktor (
- Objekt
arguments:- Bežná funkcia: Má vlastný objekt
arguments. - Šípová funkcia: Nemá vlastný
arguments, prístup je cez rest parametre (...args).
- Bežná funkcia: Má vlastný objekt
- Meno funkcie:
- Bežná funkcia: Môže byť pomenovaná (
function myFunction() { ... }). - Šípová funkcia: Je anonymná, priradí sa premennej (
const myFunction = () => { ... }).
- Bežná funkcia: Môže byť pomenovaná (
- Implicitný návrat:
- Bežná funkcia: Vyžaduje explicitný
return. - Šípová funkcia: Pri jednoslovnom tele môže implicitne vracať výsledok výrazu.
- Bežná funkcia: Vyžaduje explicitný
Porovnávacia tabuľka:
| Charakteristika | Bežná funkcia | Šípová funkcia |
|---|---|---|
| Syntaxe | function name() { ... } |
() => { ... } |
Kontext this |
Dynaický (volanie) | Lexikálny (z rodičovského prostredia) |
| Konštruktor | Áno | Nie |
Objekt arguments |
Áno | Nie (používa rest parametre) |
| Meno funkcie | Môže byť pomenovaná | Anonymná (priradzuje sa) |
| Implicitný návrat | Nie (zvyčajne vyžaduje return) |
Áno (pre jednoslovné telo) |
// Príklady bežných funkcií
function standardFunction() {
console.log(this); // Závisí od kontextu volania
console.log(arguments); // Objekt arguments je dostupný
}
const obj = {
method: standardFunction
};
standardFunction(); // this bude window alebo undefined
obj.method(); // this bude obj
new standardFunction(); // this bude nový objekt
// Príklady šípových funkcií
const arrowFunction = () => {
console.log(this); // Dedi z okolia
// console.log(arguments); // Chyba, arguments nie je dostupný
};
const outerObj = {
outerMethod: function() {
const innerArrowFunction = () => {
console.log(this); // Dedi z outerMethod (outerObj)
};
innerArrowFunction();
}
};
arrowFunction(); // this bude window alebo {} (v Node.js)
outerObj.outerMethod(); // this v innerArrowFunction bude outerObj
// Implicitný návrat v šípovej funkcii
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5
// Obecná funkcia s explicitným návratom
function multiply(a, b) {
return a * b;
}
console.log(multiply(2, 3)); // 6
// Šípová funkcia nemôže byť konštruktor
// new arrowFunction(); // Chyba: TypeError