Junior
Kāda ir atšķirība starp bultiņas funkcijām un parastajām funkcijām JavaScript?
sobes.tech AI
Atbilde no AI
- Sintakse:
- Parasta funkcija:
function myFunction() { ... } - Arrow funkcija:
() => { ... }vaiparam => { ... }
- Parasta funkcija:
thiskonteksts:- Parasta funkcija:
thistiek definēts izsaukuma kontekstā. - Arrow funkcija:
thislexikāli mantojas no apkārtējās skatāmas vides (nav savathis).
- Parasta funkcija:
- Konstruktori:
- Parasta funkcija: var tikt izmantota kā konstruktors (
new myFunction()). - Arrow funkcija: nevar tikt izmantota kā konstruktors.
- Parasta funkcija: var tikt izmantota kā konstruktors (
argumentsobjekts:- Parasta funkcija: tai ir savs
argumentsobjekts, kas satur nodotos argumentus. - Arrow funkcija: tai nav sava
argumentsobjekta, piekļuve argumentiem notiek caur rest parametrus (...args).
- Parasta funkcija: tai ir savs
- Nosauktas funkcijas:
- Parasta funkcija: var būt nosaukta (
function myFunction() { ... }). - Arrow funkcija: pēc noklusējuma ir anonīma, piešķirta mainīgajam nosaukuma dēļ (
const myFunction = () => { ... }).
- Parasta funkcija: var būt nosaukta (
- Netiešais atgrieziens:
- Parasta funkcija: prasa skaidru
returnizmantošanu, lai atgrieztu vērtību (izņemot vienkāršus gadījumus, piemēram, IIFE). - Arrow funkcija: vienas rindas ķermenī var netieši atgriezt izteiksmes rezultātu bez
return.
- Parasta funkcija: prasa skaidru
Salīdzināšanas tabula:
| Raksturlielums | Parasta funkcija | Arrow funkcija |
|---|---|---|
| Sintakse | function name() { ... } |
() => { ... } |
this konteksts |
Dinamisks (izsaukšanas konteksts) | Leksikāls (mātes apgabals) |
| Konstruktors | Jā | Nē |
arguments objekts |
Jā | Nē (izmanto rest parametrus) |
| Nosaukums | Var būt nosaukts | Nav nosaukts (piešķirts) |
| Netiešais atgrieziens | Nē (parasti nepieciešams return) |
Jā (viena rindas ķermenī) |
// Parastu funkciju piemēri
function standardFunction() {
console.log(this); // Atkarīgs no izsaukšanas konteksta
console.log(arguments); // Pieejams arguments objekts
}
const obj = {
method: standardFunction
};
standardFunction(); // this būs window (pārlūkā) vai undefined (stingrā režīmā)
obj.method(); // this būs obj
new standardFunction(); // this būs jauns objekta instances
// Arrow funkciju piemēri
const arrowFunction = () => {
console.log(this); // Manto no vecā apgabala (piem., Globālais vai modulis)
// console.log(arguments); // Kļūda, arguments nav pieejams
};
const outerObj = {
outerMethod: function() {
const innerArrowFunction = () => {
console.log(this); // Manto no outerMethod (kas ir outerObj)
};
innerArrowFunction();
}
};
arrowFunction(); // this būs window (pārlūkā) vai {} (Node.js)
outerObj.outerMethod(); // this iekšā innerArrowFunction būs outerObj
// Netiešais atgrieziens arrow funkcijā
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5 (netiešais atgrieziens a + b)
// Parasta funkcija ar skaidru atgriešanu
function multiply(a, b) {
return a * b;
}
console.log(multiply(2, 3)); // 6
// Arrow funkcija nevar būt konstruktors
// new arrowFunction(); // Kļūda: TypeError: arrowFunction_1 is not a constructor