Selles õpetuses saate näidete abil õppida JavaScripti noole funktsiooni.
Noolefunktsioon on üks JavaScripti ES6 versioonis kasutatavatest funktsioonidest. See võimaldab teil luua funktsioone tavaliste funktsioonidega võrreldes puhtamal viisil. Näiteks
see funktsioon
// function expression let x = function(x, y) ( return x * y; )
saab kirjutada järgmiselt
// using arrow functions let x = (x, y) => x * y;
noolefunktsiooni abil.
Noolefunktsiooni süntaks
Noolefunktsiooni süntaks on järgmine:
let myFunction = (arg1, arg2,… argN) => ( statement(s) )
Siin,
myFunction
on funktsiooni nimiarg1, arg2,… argN
on funktsiooni argumendidstatement(s)
on funktsioon keha
Kui kehal on üks lause või avaldis, saate noole funktsiooni kirjutada järgmiselt:
let myFunction = (arg1, arg2,… argN) => expression
Näide 1: Noole funktsioon ilma argumendita
Kui funktsioon ei võta ühtegi argumenti, peaksite kasutama tühje sulgusid. Näiteks,
let greet = () => console.log('Hello'); greet(); // Hello
Näide 2: Noole funktsioon ühe argumendiga
Kui funktsioonil on ainult üks argument, võite sulgud välja jätta. Näiteks,
let greet = x => console.log(x); greet('Hello'); // Hello
Näide 3: noole funktsioon avaldisena
Samuti saate funktsiooni dünaamiliselt luua ja kasutada avaldisena. Näiteks,
let age = 5; let welcome = (age console.log('Baby') : () => console.log('Adult'); welcome(); // Baby
Näide 4: Mitmerealised noolefunktsioonid
Kui funktsiooni kehal on mitu lauset, peate need panema lokkis sulgudesse ()
. Näiteks,
let sum = (a, b) => ( let result = a + b; return result; ) let result1 = sum(5,7); console.log(result1); // 12
seda noolefunktsiooniga
Tavalise funktsiooni sees viitab see märksõna funktsioonile, kus seda nimetatakse.
Kuid see this
ei ole seotud noole funktsioonidega. Noolefunktsioonil pole oma this
. Nii et kui helistate this
, viitab see vanema ulatusele. Näiteks,
Tavapärase funktsiooni sees
function Person() ( this.name = 'Jack', this.age = 25, this.sayName = function () ( // this is accessible console.log(this.age); function innerFunc() ( // this refers to the global object console.log(this.age); console.log(this); ) innerFunc(); ) ) let x = new Person(); x.sayName();
Väljund
25 määratlemata aken ()
Siin on this.age
seespool this.sayName()
juurdepääsetav, kuna see this.sayName()
on objekti meetod.
See innerFunc()
on siiski tavaline funktsioon ja sellele this.age
ei pääse juurde, kuna see this
viitab globaalsele objektile (brauseri aknaobjekt). Seega this.age
sees innerFunc()
funktsioon annab undefined
.
Noolefunktsiooni sees
function Person() ( this.name = 'Jack', this.age = 25, this.sayName = function () ( console.log(this.age); let innerFunc = () => ( console.log(this.age); ) innerFunc(); ) ) const x = new Person(); x.sayName();
Väljund
25 25
Siin innerFunc()
määratletakse funktsioon noolefunktsiooni abil. Ja noolefunktsiooni sees this
viitab vanema ulatusele. Seega this.age
annab 25 .
Argumendid siduvad
Regulaarsete funktsioonide argumendid on siduvad. Sellepärast, kui edastate argumendid tavalisele funktsioonile, saate neile arguments
märksõna abil juurde pääseda . Näiteks,
let x = function () ( console.log(arguments); ) x(4,6,7); // Arguments (4, 6, 7)
Noolefunktsioonidel pole siduvaid argumente.
Kui proovite noolefunktsiooni abil argumendile juurde pääseda, annab see vea. Näiteks,
let x = () => ( console.log(arguments); ) x(4,6,7); // ReferenceError: Can't find variable: arguments
Selle probleemi lahendamiseks võite kasutada levitamise süntaksit. Näiteks,
let x = (… n) => ( console.log(n); ) x(4,6,7); // (4, 6, 7)
Noole funktsioon lubaduste ja tagasihelistamistega
Noolefunktsioonid pakuvad paremat süntaksi lubaduste ja tagasihelistuste kirjutamiseks. Näiteks,
// ES5 asyncFunction().then(function() ( return asyncFunction1(); )).then(function() ( return asyncFunction2(); )).then(function() ( finish; ));
saab kirjutada järgmiselt
// ES6 asyncFunction() .then(() => asyncFunction1()) .then(() => asyncFunction2()) .then(() => finish);
Asjad, mida peaksite noolefunktsioonide abil vältima
1. Objektide sees olevate meetodite loomiseks ei tohiks kasutada noole funktsioone.
let person = ( name: 'Jack', age: 25, sayName: () => ( // this refers to the global… // console.log(this.age); ) ) person.sayName(); // undefined
2. Te ei saa konstruktorina kasutada noole funktsiooni . Näiteks,
let Foo = () => (); let foo = new Foo(); // TypeError: Foo is not a constructor
Märkus : noole funktsioonid võeti kasutusele ES6-s . Mõni brauser ei pruugi noolefunktsioonide kasutamist toetada. Lisateabe saamiseks külastage JavaScripti noolefunktsiooni tugiteenust.