Junior
Jaký je rozdíl mezi šipkovými funkcemi a běžnými funkcemi v JavaScriptu?
sobes.tech AI
Odpověď od AI
- Syntax:
- Obecná funkce:
function myFunction() { ... } - Šipková funkce:
() => { ... }neboparam => { ... }
- Obecná funkce:
- Kontext
this:- Obecná funkce:
thisje určeno kontextem volání. - Šipková funkce:
thisje lexikálně děděno z okolního prostředí (nemá vlastníthis).
- Obecná funkce:
- Konstruktory:
- Obecná funkce: Může být použita jako konstruktor (
new myFunction()). - Šipková funkce: Nemůže být použita jako konstruktor.
- Obecná funkce: Může být použita jako konstruktor (
- Objekt
arguments:- Obecná funkce: Má vlastní objekt
arguments. - Šipková funkce: Nemá vlastní
arguments, přístup k argumentům je přes rest parametry (...args).
- Obecná funkce: Má vlastní objekt
- Pojmenované funkce:
- Obecná funkce: Může být pojmenovaná (
function myFunction() { ... }). - Šipková funkce: Je anonymní, přiřazuje se proměnné (
const myFunction = () => { ... }).
- Obecná funkce: Může být pojmenovaná (
- Implicitní návrat:
- Obecná funkce: Vyžaduje explicitní
returnpro návrat hodnoty. - Šipková funkce: Při jednoslovném těle může implicitně vracet výsledek výrazu.
- Obecná funkce: Vyžaduje explicitní
Porovnávací tabulka:
| Charakteristika | Obecná funkce | Šipková funkce |
|---|---|---|
| Syntaxe | function name() { ... } |
() => { ... } |
Kontext this |
Dynamický (volání) | Lexikální (z rodičovského prostředí) |
| Konstruktor | Ano | Ne |
Objekt arguments |
Ano | Ne (používá rest parametry) |
| Pojmenování | Může být pojmenovaná | Anonymní (přiřazena) |
| Implicitní návrat | Ne (obvykle je třeba return) |
Ano (pro jednoslovné tělo) |
// Příklady obecných funkcí
function standardFunction() {
console.log(this); // Závisí na kontextu volání
console.log(arguments); // Objekt arguments je dostupný
}
const obj = {
method: standardFunction
};
standardFunction(); // this bude window nebo undefined
obj.method(); // this bude obj
new standardFunction(); // this bude nový objekt
// Příklady šipkových funkcí
const arrowFunction = () => {
console.log(this); // Dědí z okolního prostředí
// console.log(arguments); // Chyba, arguments není dostupný
};
const outerObj = {
outerMethod: function() {
const innerArrowFunction = () => {
console.log(this); // dědí z outerMethod (outerObj)
};
innerArrowFunction();
}
};
arrowFunction(); // this bude window nebo {} (v Node.js)
outerObj.outerMethod(); // this uvnitř innerArrowFunction bude outerObj
// Implicitní návrat v šipkové funkci
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5
// Obecná funkce s explicitním návratem
function multiply(a, b) {
return a * b;
}
console.log(multiply(2, 3)); // 6
// Šipková funkce nemůže být konstruktor
// new arrowFunction(); // Chyba: TypeError