У овом упутству ћете научити о функцији стрелице ЈаваСцрипт помоћу примера.
Функција стрелице је једна од карактеристика представљених у ЕС6 верзији ЈаваСцрипт-а. Омогућава вам стварање функција на чишћи начин у поређењу са редовним функцијама. На пример,
Ова функција
// function expression let x = function(x, y) ( return x * y; )
може се записати као
// using arrow functions let x = (x, y) => x * y;
помоћу функције стрелице.
Синтакса функције стрелице
Синтакса функције стрелице је:
let myFunction = (arg1, arg2,… argN) => ( statement(s) )
Ево,
myFunction
је назив функцијеarg1, arg2,… argN
су аргументи функцијеstatement(s)
је тело функције
Ако тело има једну изјаву или израз, можете написати функцију стрелице као:
let myFunction = (arg1, arg2,… argN) => expression
Пример 1: Функција стрелице без аргумента
Ако функција не узима ниједан аргумент, требало би да користите празне заграде. На пример,
let greet = () => console.log('Hello'); greet(); // Hello
Пример 2: Функција стрелице са једним аргументом
Ако функција има само један аргумент, можете изоставити заграде. На пример,
let greet = x => console.log(x); greet('Hello'); // Hello
Пример 3: Функција стрелице као израз
Такође можете динамички креирати функцију и користити је као израз. На пример,
let age = 5; let welcome = (age console.log('Baby') : () => console.log('Adult'); welcome(); // Baby
Пример 4: Функције вишередних стрелица
Ако тело функције има више изјава, морате их ставити у коврџаве заграде ()
. На пример,
let sum = (a, b) => ( let result = a + b; return result; ) let result1 = sum(5,7); console.log(result1); // 12
ово са функцијом стрелице
Унутар регуларне функције, ова кључна реч односи се на функцију где се зове.
Међутим, this
није повезано са функцијама стрелице. Функција стрелице нема своју this
. Дакле, кад год позовете this
, односи се на родитељски опсег. На пример,
Унутар редовне функције
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();
Оутпут
25 недефинисаних прозора ()
Овде је this.age
унутра this.sayName()
могуће приступити јер this.sayName()
је то метода објекта.
Међутим, innerFunc()
то је нормална функција и this.age
није јој доступно јер this
се односи на глобални објекат (објект Виндов у прегледачу). Дакле, this.age
унутар innerFunc()
функције даје undefined
.
Унутар функције стрелице
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();
Оутпут
25 25
Овде се innerFunc()
функција дефинише помоћу функције стрелице. А унутар функције стрелице, this
односи се на опсег родитеља. Отуда this.age
даје 25 .
Обавезивање аргумената
Регуларне функције имају обавезујуће аргументе. Зато када аргументе прослеђујете редовној функцији, можете им приступити помоћу arguments
кључне речи. На пример,
let x = function () ( console.log(arguments); ) x(4,6,7); // Arguments (4, 6, 7)
Функције стрелица немају обавезујуће аргументе.
Када покушате да приступите аргументу помоћу функције стрелице, то ће дати грешку. На пример,
let x = () => ( console.log(arguments); ) x(4,6,7); // ReferenceError: Can't find variable: arguments
Да бисте решили овај проблем, можете користити синтаксу ширења. На пример,
let x = (… n) => ( console.log(n); ) x(4,6,7); // (4, 6, 7)
Функција стрелице са обећањима и повратним позивима
Функције стрелица пружају бољу синтаксу за писање обећања и повратних позива. На пример,
// ES5 asyncFunction().then(function() ( return asyncFunction1(); )).then(function() ( return asyncFunction2(); )).then(function() ( finish; ));
може се записати као
// ES6 asyncFunction() .then(() => asyncFunction1()) .then(() => asyncFunction2()) .then(() => finish);
Ствари које бисте требали избегавати са функцијама стрелице
1. Не бисте требали користити функције стрелица за креирање метода унутар објеката.
let person = ( name: 'Jack', age: 25, sayName: () => ( // this refers to the global… // console.log(this.age); ) ) person.sayName(); // undefined
2. Не можете користити функцију стрелице као конструктор . На пример,
let Foo = () => (); let foo = new Foo(); // TypeError: Foo is not a constructor
Напомена : Функције стрелица уведене су у ЕС6 . Неки прегледачи можда не подржавају употребу функција стрелица. Посетите подршку за ЈаваСцрипт функцију стрелице да бисте сазнали више.