Junior
Mi a különbség a nyílfüggvények és a normál függvények között JavaScriptben?
sobes.tech MI
Válasz az MI-től
- Szintaxis:
- Általános függvény:
function myFunction() { ... } - Nyíl függvény:
() => { ... }vagyparam => { ... }
- Általános függvény:
thiskontextus:- Általános függvény: A
thisa hívás kontextusától függ. - Nyíl függvény: A
thislexikusan öröklődik a környező szcénából (nem rendelkezik sajátthis-el).
- Általános függvény: A
- Konstruktorok:
- Általános függvény: Használható konstruktorként (
new myFunction()). - Nyíl függvény: Nem használható konstruktorként.
- Általános függvény: Használható konstruktorként (
argumentsobjektum:- Általános függvény: Saját
argumentsobjektummal rendelkezik. - Nyíl függvény: Nincs saját
arguments-a, az argumentumokhoz a rest paraméterek (...args) segítségével lehet hozzáférni.
- Általános függvény: Saját
- Nevezett függvények:
- Általános függvény: Nevezhető (
function myFunction() { ... }). - Nyíl függvény: Alapértelmezés szerint névtelen, változóhoz rendelve nevezik (
const myFunction = () => { ... }).
- Általános függvény: Nevezhető (
- Implicit visszatérés:
- Általános függvény: Kifejezetten
return-t igényel a visszatéréshez. - Nyíl függvény: Egysoros test esetén implicit visszatér a kifejezés eredményével.
- Általános függvény: Kifejezetten
Összehasonlító táblázat:
| Jellemző | Általános függvény | Nyíl függvény |
|---|---|---|
| Szintaxis | function name() { ... } |
() => { ... } |
this kontextus |
Dinamikus (hívási kontextus) | Lexikusan öröklött (szülői környezetből) |
| Konstruktor | Igen | Nem |
arguments objektum |
Igen | Nem (rest paraméterekkel) |
| Névvel ellátott függvény | Igen | Név nélküli (hozzárendelve) |
| Implicit visszatérés | Nem (általában return szükséges) |
Igen (egysoros test esetén) |
// Példák általános függvényekre
function standardFunction() {
console.log(this); // A hívási kontextustól függ
console.log(arguments); // Az arguments objektum elérhető
}
const obj = {
method: standardFunction
};
standardFunction(); // this a window vagy undefined
obj.method(); // this az obj
new standardFunction(); // this az új példány
// Nyíl függvény példák
const arrowFunction = () => {
console.log(this); // A szülő környezetből öröklődik
// console.log(arguments); // Hiba, nincs arguments
};
const outerObj = {
outerMethod: function() {
const innerArrowFunction = () => {
console.log(this); // az outerMethod-ből öröklődik (outerObj)
};
innerArrowFunction();
}
};
arrowFunction(); // this a window vagy {} (Node.js)
outerObj.outerMethod(); // innerArrowFunction-ben this az outerObj
// Implicit visszatérés nyíl függvényben
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5
// Általános függvény explicit visszatéréssel
function multiply(a, b) {
return a * b;
}
console.log(multiply(2, 3)); // 6
// Nyíl függvény nem lehet konstruktor
// new arrowFunction(); // Hiba: TypeError