Junior
Mis vahe on noolefunktsioonidel ja tavalistel funktsioonidel JavaScriptis?
sobes.tech AI
Vastus AI-lt
- Süntaks:
- Tavaline funktsioon:
function myFunction() { ... } - Noolefunktsioon:
() => { ... }võiparam => { ... }
- Tavaline funktsioon:
thiskontekst:- Tavaline funktsioon:
thismääratakse kutsumise konteksti järgi. - Noolefunktsioon:
thispärandub leksikaalselt ümbritsevast vahemikust (ei omathis).
- Tavaline funktsioon:
- Konstruktorid:
- Tavaline funktsioon: saab kasutada konstruktorina (
new myFunction()). - Noolefunktsioon: ei saa kasutada konstruktorina.
- Tavaline funktsioon: saab kasutada konstruktorina (
argumentsobjekt:- Tavaline funktsioon: omab oma
argumentsobjekti, mis sisaldab edastatud argumente. - Noolefunktsioon: ei oma
argumentsobjekti, juurdepääs argumentidele toimub rest-parameetrite (...args) kaudu.
- Tavaline funktsioon: omab oma
- Nimetatud funktsioonid:
- Tavaline funktsioon: võib olla nimetatud (
function myFunction() { ... }). - Noolefunktsioon: vaikimisi anonüümne, määratakse muutuja kaudu nimeks (
const myFunction = () => { ... }).
- Tavaline funktsioon: võib olla nimetatud (
- Nimeta tagasikutsumine:
- Tavaline funktsioon: nõuab selget
returnkasutamist väärtuse tagastamiseks (välja arvatud lihtsate juhtumite puhul, nagu IIFE). - Noolefunktsioon: ühe rea keha puhul võib automaatselt tagastada väljendi tulemust ilma
return-ita.
- Tavaline funktsioon: nõuab selget
Võrdlustabel:
| Omadus | Tavaline funktsioon | Noolefunktsioon |
|---|---|---|
| Süntaks | function name() { ... } |
() => { ... } |
this kontekst |
Dynaamiline (kutsumise kontekst) | Leksikaalne (vanemal alal) |
| Konstruktor | Jah | Ei |
arguments objekti |
Jah | Ei (kasutades rest-parameetreid) |
| Nimetus | Võib olla nimetatud | Nimetu (määratakse muutuja kaudu) |
| Nimeta tagasikutsumine | Ei (tavaliselt nõutav return) |
Jah (ühe rea keha puhul) |
// Tavaliste funktsioonide näited
function standardFunction() {
console.log(this); // sõltub kutsumise kontekstist
console.log(arguments); // kättesaadav arguments objekt
}
const obj = {
method: standardFunction
};
standardFunction(); // this on window (brauseris) või undefined (strict mode)
obj.method(); // this on obj
new standardFunction(); // this on uus objekti eksemplar
// Noolefunktsioonide näited
const arrowFunction = () => {
console.log(this); // pärineb vanemalt alalt (nt. Globaalne või moodul)
// console.log(arguments); // viga, arguments pole kättesaadav
};
const outerObj = {
outerMethod: function() {
const innerArrowFunction = () => {
console.log(this); // pärineb outerMethod-ist (mis on outerObj)
};
innerArrowFunction();
}
};
arrowFunction(); // this on window (brauseris) või {} (Node.js)
outerObj.outerMethod(); // this innerArrowFunction-i sees on outerObj
// Nimetu tagasikutsumine noolefunktsioonis
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5 (automaatne tagasivõtt a + b)
// Tavaline funktsioon selge tagasivõtuga
function multiply(a, b) {
return a * b;
}
console.log(multiply(2, 3)); // 6
// Noolefunktsioon ei saa olla konstruktor
// new arrowFunction(); // viga: TypeError: arrowFunction_1 is not a constructor