U ovom ćete tutorijalu uz primjere naučiti o funkciji JavaScript strelice.
Funkcija strelice jedna je od značajki predstavljenih u ES6 verziji JavaScript-a. Omogućuje vam stvaranje funkcija na čišći način u usporedbi s uobičajenim funkcijama. Na primjer,
Ova funkcija
// function expression let x = function(x, y) ( return x * y; )
može se zapisati kao
// using arrow functions let x = (x, y) => x * y;
pomoću funkcije strelice.
Sintaksa funkcije strelice
Sintaksa funkcije strelice je:
let myFunction = (arg1, arg2,… argN) => ( statement(s) )
Ovdje,
myFunction
je naziv funkcijearg1, arg2,… argN
su argumenti funkcijestatement(s)
je tijelo funkcije
Ako tijelo ima jednu izjavu ili izraz, možete napisati funkciju strelice kao:
let myFunction = (arg1, arg2,… argN) => expression
Primjer 1: Funkcija strelice bez argumenta
Ako funkcija ne uzima nijedan argument, trebali biste koristiti prazne zagrade. Na primjer,
let greet = () => console.log('Hello'); greet(); // Hello
Primjer 2: Funkcija strelice s jednim argumentom
Ako funkcija ima samo jedan argument, možete izostaviti zagrade. Na primjer,
let greet = x => console.log(x); greet('Hello'); // Hello
Primjer 3: Funkcija strelice kao izraz
Također možete dinamički stvoriti funkciju i koristiti je kao izraz. Na primjer,
let age = 5; let welcome = (age console.log('Baby') : () => console.log('Adult'); welcome(); // Baby
Primjer 4: Funkcije višerednih strelica
Ako tijelo funkcije ima više izjava, morate ih staviti u kovrčave zagrade ()
. Na primjer,
let sum = (a, b) => ( let result = a + b; return result; ) let result1 = sum(5,7); console.log(result1); // 12
ovo s funkcijom strelice
Unutar redovite funkcije, ova se ključna riječ odnosi na funkciju u kojoj je pozvana.
Međutim, this
nije povezano s funkcijama strelice. Funkcija strelice nema svoje this
. Dakle, kad god zovete this
, odnosi se na svoj nadređeni opseg. Na primjer,
Unutar redovite funkcije
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();
Izlaz
25 nedefinirani prozor ()
Ovdje je this.age
unutra moguće this.sayName()
pristupiti jer this.sayName()
je to metoda objekta.
Međutim, innerFunc()
to je normalna funkcija i this.age
nije joj dostupno jer se this
odnosi na globalni objekt (objekt Prozor u pregledniku). Dakle, this.age
unutar innerFunc()
funkcije daje undefined
.
Unutar funkcije strelice
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();
Izlaz
25 25
Ovdje se innerFunc()
funkcija definira pomoću funkcije strelice. A unutar funkcije strelice this
odnosi se na opseg roditelja. Dakle, this.age
daje 25 .
Obavezivanje argumenata
Regularne funkcije imaju obvezujuće argumente. Zbog toga kada prosljeđujete argumente redovnoj funkciji, možete im pristupiti pomoću arguments
ključne riječi. Na primjer,
let x = function () ( console.log(arguments); ) x(4,6,7); // Arguments (4, 6, 7)
Funkcije strelica nemaju obvezujuće argumente.
Kad pokušate pristupiti argumentu pomoću funkcije strelice, pojavit će se pogreška. Na primjer,
let x = () => ( console.log(arguments); ) x(4,6,7); // ReferenceError: Can't find variable: arguments
Da biste riješili ovaj problem, možete koristiti sintaksu širenja. Na primjer,
let x = (… n) => ( console.log(n); ) x(4,6,7); // (4, 6, 7)
Funkcija strelice s obećanjima i povratnim pozivima
Funkcije strelica pružaju bolju sintaksu za pisanje obećanja i povratnih poziva. Na primjer,
// ES5 asyncFunction().then(function() ( return asyncFunction1(); )).then(function() ( return asyncFunction2(); )).then(function() ( finish; ));
može se zapisati kao
// ES6 asyncFunction() .then(() => asyncFunction1()) .then(() => asyncFunction2()) .then(() => finish);
Stvari koje biste trebali izbjegavati s funkcijama strelice
1. Ne biste trebali koristiti funkcije strelica za stvaranje metoda unutar objekata.
let person = ( name: 'Jack', age: 25, sayName: () => ( // this refers to the global… // console.log(this.age); ) ) person.sayName(); // undefined
2. Ne možete koristiti funkciju strelice kao konstruktor . Na primjer,
let Foo = () => (); let foo = new Foo(); // TypeError: Foo is not a constructor
Napomena : Funkcije strelica uvedene su u ES6 . Neki preglednici možda ne podržavaju upotrebu strelica. Posjetite podršku za funkcije JavaScript strelice da biste saznali više.