Junior
Kuo skiriasi rodyklės funkcijos nuo įprastų funkcijų JavaScript?
sobes.tech AI
Atsakymas iš AI
- Sintekse:
- Įprasta funkcija:
function myFunction() { ... } - Arrow funkcija:
() => { ... }arbaparam => { ... }
- Įprasta funkcija:
thiskontekstas:- Įprasta funkcija:
thisnustatomas iškvietimo kontekstu. - Arrow funkcija:
thissemantiškai paveldima iš aplinkos srities (neturi savothis).
- Įprasta funkcija:
- Konstruktoriai:
- Įprasta funkcija: gali būti naudojama kaip konstruktorius (
new myFunction()). - Arrow funkcija: negali būti naudojama kaip konstruktorius.
- Įprasta funkcija: gali būti naudojama kaip konstruktorius (
argumentsobjektas:- Įprasta funkcija: turi savo
argumentsobjektą, kuriame yra perduoti argumentai. - Arrow funkcija: neturi savo
argumentsobjekto, prieiga prie argumentų vykdoma per rest parametrus (...args).
- Įprasta funkcija: turi savo
- Pavadintos funkcijos:
- Įprasta funkcija: gali būti pavadinta (
function myFunction() { ... }). - Arrow funkcija: numatytai yra anonimė, priskiriama kintamajam pavadinimui (
const myFunction = () => { ... }).
- Įprasta funkcija: gali būti pavadinta (
- Nematomas grąžinimas:
- Įprasta funkcija: reikalauja aiškaus
returnnaudojimo grąžinti reikšmę (išskyrus paprastus atvejus, kaip IIFE). - Arrow funkcija: vieno sakinio kūne gali neaiškiai grąžinti išraiškos rezultatą be
return.
- Įprasta funkcija: reikalauja aiškaus
Lentelė palyginimui:
| Savybė | Įprasta funkcija | Arrow funkcija |
|---|---|---|
| Sintaksė | function name() { ... } |
() => { ... } |
this kontekstas |
Dinamiškas (kvietimo kontekstas) | Leksikinis (tėvų srities) |
| Konstruktorius | Taip | Ne |
arguments objektas |
Taip | Ne (naudojant rest parametrus) |
| Pavadinimas | Gali būti pavadinta | Nėra pavadinta (priskiriama) |
| Nematomas grąžinimas | Ne (reikalauja return) |
Taip (vieno sakinio kūne) |
// Pavyzdžiai įprastų funkcijų
function standardFunction() {
console.log(this); // Priklauso nuo kvietimo konteksto
console.log(arguments); // Pasiekiamas arguments objektas
}
const obj = {
method: standardFunction
};
standardFunction(); // this bus window (naršyklėje) arba undefined (strict mode)
obj.method(); // this bus obj
new standardFunction(); // this bus naujas objekto standartinė funkcija
// Pavyzdžiai arrow funkcijų
const arrowFunction = () => {
console.log(this); // Paveldi this iš tėvų srities (pvz., Global arba modulio)
// console.log(arguments); // Klaida, arguments nėra pasiekiamas
};
const outerObj = {
outerMethod: function() {
const innerArrowFunction = () => {
console.log(this); // Paveldi this iš outerMethod (kuris yra outerObj)
};
innerArrowFunction();
}
};
arrowFunction(); // this bus window (naršyklėje) arba {} (Node.js)
outerObj.outerMethod(); // this viduje innerArrowFunction bus outerObj
// Nematomas grąžinimas arrow funkcijoje
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5 (nemažina `return` išraiškos)
// Įprasta funkcija su aiškiu grąžinimu
function multiply(a, b) {
return a * b;
}
console.log(multiply(2, 3)); // 6
// Arrow funkcija negali būti konstruktorius
// new arrowFunction(); // Klaida: TypeError: arrowFunction_1 is not a constructor