V tomto výučbe sa na príkladoch dozviete o funkcii šípky JavaScriptu.
Funkcia šípky je jednou z funkcií zavedených vo verzii ES6 JavaScriptu. Umožňuje vám vytvárať funkcie čistejšie v porovnaní s bežnými funkciami. Napríklad
Táto funkcia
// function expression let x = function(x, y) ( return x * y; )
možno napísať ako
// using arrow functions let x = (x, y) => x * y;
pomocou funkcie šípky.
Syntax funkcie šípky
Syntax funkcie šípky je:
let myFunction = (arg1, arg2,… argN) => ( statement(s) )
Tu,
myFunction
je názov funkciearg1, arg2,… argN
sú argumenty funkciestatement(s)
je funkčný orgán
Ak má telo jeden príkaz alebo výraz, môžete funkciu šípky zapísať ako:
let myFunction = (arg1, arg2,… argN) => expression
Príklad 1: Funkcia šípky bez argumentu
Ak funkcia neprijíma žiadny argument, mali by ste použiť prázdne zátvorky. Napríklad,
let greet = () => console.log('Hello'); greet(); // Hello
Príklad 2: Funkcia šípky s jedným argumentom
Ak má funkcia iba jeden argument, môžete zátvorky vynechať. Napríklad,
let greet = x => console.log(x); greet('Hello'); // Hello
Príklad 3: Funkcia šípky ako výraz
Môžete tiež dynamicky vytvoriť funkciu a použiť ju ako výraz. Napríklad,
let age = 5; let welcome = (age console.log('Baby') : () => console.log('Adult'); welcome(); // Baby
Príklad 4: Funkcie viacradovej šípky
Ak má telo funkcie viac príkazov, musíte ich vložiť do zložených zátvoriek ()
. Napríklad,
let sum = (a, b) => ( let result = a + b; return result; ) let result1 = sum(5,7); console.log(result1); // 12
toto s funkciou Arrow
Vo vnútri bežnej funkcie toto kľúčové slovo odkazuje na funkciu, kde sa nazýva.
Nie this
je to však spojené s funkciami šípok. Funkcia šípky nemá svoju vlastnú this
. Takže kedykoľvek zavoláte this
, odkazuje sa na jeho nadradený rozsah. Napríklad,
Vo vnútri bežnej funkcie
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ýkon
25 nedefinovaných okien ()
Tu je this.age
vnútro this.sayName()
prístupné, pretože this.sayName()
ide o metódu objektu.
Je innerFunc()
to však normálna funkcia a this.age
nie je prístupná, pretože sa this
týka globálneho objektu (objekt Window v prehliadači). Preto this.age
vo vnútri innerFunc()
funkcie dáva undefined
.
Vo vnútri funkcie šípky
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ýkon
25 25
Tu je innerFunc()
funkcia definovaná pomocou funkcie šípky. A vo vnútri funkcie šípky sa this
odkazuje na rozsah rodiča. Preto this.age
dáva 25 .
Argumenty záväzné
Regulárne funkcie majú väzbu argumentov. Preto keď odovzdáte argumenty bežnej funkcii, môžete k nim získať prístup pomocou arguments
kľúčového slova. Napríklad,
let x = function () ( console.log(arguments); ) x(4,6,7); // Arguments (4, 6, 7)
Funkcie šípok neobsahujú väzby argumentov.
Pri pokuse o prístup k argumentu pomocou funkcie šípky sa zobrazí chyba. Napríklad,
let x = () => ( console.log(arguments); ) x(4,6,7); // ReferenceError: Can't find variable: arguments
Na vyriešenie tohto problému môžete použiť syntax šírenia. Napríklad,
let x = (… n) => ( console.log(n); ) x(4,6,7); // (4, 6, 7)
Funkcia šípky so sľubmi a spätnými volaniami
Funkcie šípok poskytujú lepšiu syntax pri písaní sľubov a spätných volaní. Napríklad,
// ES5 asyncFunction().then(function() ( return asyncFunction1(); )).then(function() ( return asyncFunction2(); )).then(function() ( finish; ));
možno napísať ako
// ES6 asyncFunction() .then(() => asyncFunction1()) .then(() => asyncFunction2()) .then(() => finish);
Veci, ktorým by ste sa pomocou funkcií so šípkami mali vyhnúť
1. Na vytváranie metód vo vnútri objektov by ste nemali používať funkcie šípok.
let person = ( name: 'Jack', age: 25, sayName: () => ( // this refers to the global… // console.log(this.age); ) ) person.sayName(); // undefined
2. Funkciu šípky nemôžete použiť ako konštruktor . Napríklad,
let Foo = () => (); let foo = new Foo(); // TypeError: Foo is not a constructor
Poznámka : Funkcie šípok boli predstavené v ES6 . Niektoré prehliadače nemusia podporovať používanie funkcií šípok. Ak sa chcete dozvedieť viac, navštívte podporu funkcií šípky JavaScriptu.