Šioje pamokoje su pavyzdžių pagalba sužinosite apie „JavaScript“ rodyklių funkciją.
Rodyklių funkcija yra viena iš funkcijų, įdiegtų „ES6“ „JavaScript“ versijoje. Tai leidžia jums kurti funkcijas švaresniu būdu, palyginti su įprastomis funkcijomis. Pavyzdžiui,
Ši funkcija
// function expression let x = function(x, y) ( return x * y; )
galima rašyti kaip
// using arrow functions let x = (x, y) => x * y;
naudojant rodyklės funkciją.
Rodyklės funkcijos sintaksė
Rodyklės funkcijos sintaksė yra:
let myFunction = (arg1, arg2,… argN) => ( statement(s) )
Čia
myFunction
yra funkcijos pavadinimasarg1, arg2,… argN
yra funkcijos argumentaistatement(s)
yra funkcijos kūnas
Jei turinys turi vieną sakinį ar išraišką, rodyklės funkciją galite parašyti taip:
let myFunction = (arg1, arg2,… argN) => expression
1 pavyzdys: rodyklės funkcija be argumento
Jei funkcija neturi argumento, turėtumėte naudoti tuščius skliaustus. Pavyzdžiui,
let greet = () => console.log('Hello'); greet(); // Hello
2 pavyzdys: rodyklės funkcija su vienu argumentu
Jei funkcija turi tik vieną argumentą, skliaustų galite praleisti. Pavyzdžiui,
let greet = x => console.log(x); greet('Hello'); // Hello
3 pavyzdys: rodyklės funkcija kaip išraiška
Taip pat galite dinamiškai sukurti funkciją ir naudoti ją kaip išraišką. Pavyzdžiui,
let age = 5; let welcome = (age console.log('Baby') : () => console.log('Adult'); welcome(); // Baby
4 pavyzdys: daugialypės rodyklės funkcijos
Jei funkcijos turinys turi kelis sakinius, turite juos įdėti į garbanotus skliaustus ()
. Pavyzdžiui,
let sum = (a, b) => ( let result = a + b; return result; ) let result1 = sum(5,7); console.log(result1); // 12
tai su rodyklės funkcija
Įprastos funkcijos viduje šis raktinis žodis nurodo funkciją, kurioje ji vadinama.
Tačiau this
nėra susijęs su rodyklių funkcijomis. Rodyklės funkcija neturi savo this
. Taigi, kai skambinate this
, tai nurodo jo pirminę sritį. Pavyzdžiui,
Įprastos funkcijos viduje
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();
Rezultatas
25 neapibrėžtas langas ()
Čia this.age
vidus this.sayName()
yra prieinamas, nes this.sayName()
yra objekto metodas.
Tačiau innerFunc()
tai yra įprasta funkcija ir this.age
nėra prieinama, nes this
nurodo visuotinį objektą (lango objektą naršyklėje). Vadinasi, this.age
viduje innerFunc()
funkcija suteikia undefined
.
Rodyklės funkcijos viduje
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();
Rezultatas
25 25
Čia innerFunc()
funkcija apibrėžiama naudojant rodyklės funkciją. Rodyklės funkcija this
nurodo tėvų taikymo sritį. Vadinasi, this.age
duoda 25 .
Argumentai įpareigojantys
Reguliarios funkcijos turi privalomus argumentus. Štai kodėl, perduodami argumentus įprastai funkcijai, galite juos pasiekti naudodami arguments
raktinį žodį. Pavyzdžiui,
let x = function () ( console.log(arguments); ) x(4,6,7); // Arguments (4, 6, 7)
Rodyklės funkcijos neturi privalomų argumentų.
Kai bandysite pasiekti argumentą naudodamiesi rodyklės funkcija, jis suteiks klaidą. Pavyzdžiui,
let x = () => ( console.log(arguments); ) x(4,6,7); // ReferenceError: Can't find variable: arguments
Norėdami išspręsti šią problemą, galite naudoti sklaidos sintaksę. Pavyzdžiui,
let x = (… n) => ( console.log(n); ) x(4,6,7); // (4, 6, 7)
Rodyklės funkcija su pažadais ir atgaliniais skambučiais
Rodyklių funkcijos suteikia geresnę sintaksę pažadams ir atgaliniams skambučiams rašyti. Pavyzdžiui,
// ES5 asyncFunction().then(function() ( return asyncFunction1(); )).then(function() ( return asyncFunction2(); )).then(function() ( finish; ));
galima rašyti kaip
// ES6 asyncFunction() .then(() => asyncFunction1()) .then(() => asyncFunction2()) .then(() => finish);
Dalykai, kurių turėtumėte vengti naudodami rodyklių funkcijas
1. Jūs neturėtumėte naudoti rodyklių funkcijų kurdami metodus objektų viduje.
let person = ( name: 'Jack', age: 25, sayName: () => ( // this refers to the global… // console.log(this.age); ) ) person.sayName(); // undefined
2. Negalite naudoti rodyklės funkcijos kaip konstruktorius . Pavyzdžiui,
let Foo = () => (); let foo = new Foo(); // TypeError: Foo is not a constructor
Pastaba : rodyklių funkcijos buvo įdiegtos ES6 . Kai kurios naršyklės gali nepalaikyti rodyklių funkcijų naudojimo. Norėdami sužinoti daugiau, apsilankykite „JavaScript“ rodyklių funkcijos palaikymo tarnyboje.