Функције стрелица су компактније, али да ли сте знали да постоји читав низ других разлика које уводе?
Функције су суштински део ЈаваСцрипт-а који треба да користите за писање кода за вишекратну употребу. Две главне врсте функција су регуларне и функције стрелице, а постоји много начина да их дефинишете.
Иако испуњавају сличне потребе, имају неколико критичних разлика које могу суштински утицати на то како их користите у свом коду. Сазнајте све о неколико разлика између функција стрелице и регуларних функција.
1. Синтаксне разлике
Синтакса коју одаберете када развијате ЈаваСцрипт функције има велики утицај на то колико је једноставно читати и разумети ваш код. Синтакса редовних функција и функција стрелице се значајно разликују, што утиче на начин на који их пишете и користите.
ЈаваСцрипт функције стрелице користите мању језичку структуру која је разумљивија. Можете их користити за креирање функција тако што ћете их комбиновати у један израз или израз.
конст додај = (а, б) => а + б;
У овом примеру,
додати функција прихвата два улаза, а и б,и враћа њихов укупни износ. Тхе => знак дефинише ово као функцију стрелице.С друге стране, дефинисање регуларне функције захтева употребу функција кључну реч, са опширнијом синтаксом, као што је приказано у овом примеру:
функцијадодати(а, б) {
повратак а + б;
}
У овом примеру, функција кључна реч дефинише регуларну функцију која такође користи витичасте заграде и повратак изјава.
Регуларне функције су корисније за сложену синтаксу која захтева више исказа или израза. Насупрот томе, функције са стрелицама користе сажетију синтаксу која може учинити ваш код лакшим за читање и разумевање.
2. Сцопеинг Дифференцес
Термин „опсег рада“ описује како су интерне променљиве и функције функције доступне. У ЈаваСцрипт-у дефинишете и приступате променљивим и функцијама у целом коду користећи опсег. Њихова посебна одређивање опсега може значајно утицати на то како пишете и користите ЈаваСцрипт стрелице и регуларне функције.
У погледу опсега, како функције стрелице рукују ово кључна реч се значајно разликује од уобичајених функција. Редовне функције дефинишу ово саме кључне речи; према томе, може се променити у зависности од контекста у којем позивате функцију.
С друге стране, зато што не прецизирају ово кључна реч, функције стрелице користе исто ово као статички обим који их окружује.
Да бисте видели разлику, погледајте следећи пример. Рецимо да имате а особа објекат са а име својство и метод тзв рециИме() који бележи име особе користећи редовну функцију:
конст особа = {
име: 'Џон'рециНаме: функција() {
конзола.Пријава(ово.наме);
}
};
персон.саиНаме(); // евидентира 'Јохн'
Овде је обична функција саиНаме() метода објекта персон и ово кључна реч унутар те функције се односи на објекат те особе.
Хајде сада да покушамо исту ствар са функцијом стрелице:
конст особа = {
име: 'Јован',рециНаме: () => {
конзола.Пријава(ово.наме);
}
};
персон.саиНаме(); // евидентира недефинисано
Пошто је функција стрелице коришћена у рециИме() метод не дефинише своје ово кључну реч, користи ово статичког обима који га окружује. У овом случају, то је глобални опсег инстанце.
Као резултат тога, када позовете персон.саиНаме(), добијате недефинисан радије него "Џон." Ово може значајно утицати на начин на који пишете и користите функције у свом коду.
3. Случајеви коришћења и најбоље праксе
Редовне функције су погодније за функције које захтевају сопствене ово кључне речи, као што су методе у објекту.
Функције стрелица су погодније за функционално програмирање и повратни позиви који не захтевају ово кључна реч.
4. Разлике у везивању функција
Везивање функције је термин који се користи да опише однос између ово кључну реч и функције у вашем коду. Варијације у везивању функција између функција стрелице и нормалних функција могу снажно утицати на начин на који конструишете и користите функције стрелице.
Помоћу ово кључна реч је чини јединственом у редовним функцијама и повезује се са различитим објектима на основу метода који се користе за позивање функције. Повезивање функција је једна од најважнијих разлика између регуларних функција и функција стрелице.
Насупрот томе, функције стрелица немају ово кључна реч; него добијају из околних опсега.
Погледајмо пример да боље разумемо ову разлику. Претпоставимо да имате а особа објекат са а име поље и метод тзв рециИме() која користи редовну функцију за снимање имена особе:
конст особа = {
име: 'Јован',рециНаме: функција() {
конзола.Пријава(ово.наме);
}
};конст друга особа = {
име: 'Јане'
};
персон.саиНаме.цалл (другаПерсон); // евидентира 'Јане'
У овом примеру, особу називате објектом рециИме() метод са вредношћу друга особа помоћу позив() методом. Због овога, рециИме() метод, ово, кључна реч је везана за друга особа објекат и евидентира "Јане" радије него "Јохн."
Хајде да сада користимо исту ствар са функцијом стрелице:
конст особа = {
име: 'Јован',рециНаме: () => {
конзола.Пријава(ово.наме);
}
};конст друга особа = {
име: 'Јане'
};
персон.саиНаме.цалл (другаПерсон); // евидентира недефинисано
Пошто је рециИме() техника нема сопствену кључну реч, у овом примеру користите функцију стрелице у њој. У овом случају, функција стрелице наслеђује својства околног опсега, што је глобални опсег.
То значи да када трчите персон.саиНаме.цалл (другаПерсон), функције стрелице ово кључна реч остаје глобални објекат, и недефинисан заузима место Јане у дневнику.
Ако треба да повежете функцију са одређеним ово вредност, обична функција може бити пожељнија. Међутим, ако не морате да везујете функцију за одређену ово вредност, функција стрелице може бити краћа и лакша за разумевање.
5. Имплицитни повратак
Функција стрелице има функцију имплицитног повратка. Ако се тело функције састоји од једног израза, функција враћа тај израз.
Као пример:
конст дупло = (Икс) => Икс * 2;
Ова функција стрелице враћа двоструку вредност из параметра. Не морате да користите експлицитно повратак кључна реч јер тело функције има само један израз.
6. Разлике у компатибилности
Разлике у компатибилности односе се на функције стрелице које је додао ЕЦМАСцрипт 6, које можда неће радити са старијим претраживачима или окружењима. С друге стране, регуларне функције постоје од почетка ЈаваСцрипт-а и широко су подржане.
Ево илустрације функције стрелице која можда неће радити у утврђеним условима:
конст додај = (а, б) => а + б;
Следеће је упоредива редовна функција која би требало да ради у већини ситуација:
функцијадодати(а, б) {
повратак а + б;
}
Користите редовне функције уместо функција стрелица када циљате на старија окружења да бисте осигурали компатибилност. Међутим, функције стрелице могу да обезбеде синтаксу која је лакша за разумевање и сажетија када радите са модерним прегледачима и окружењима.
Бирање између функција стрелице и регуларних функција у ЈаваСцрипт-у
У ЈаваСцрипт-у, функције са стрелицама и регуларне функције имају различите карактеристике и апликације. Функције стрелица имају једноставну синтаксу, наслеђивање ово израз кључне речи из контекста њихове употребе док су регуларне функције прилагодљивије и могу се носити са сложенијим ситуацијама.
Важно је знати у чему се разликују и како их користити у складу са захтевима вашег кода. Када бирате коју врсту функције ћете користити, требало би да узмете у обзир и разлике у компатибилности.
На крају, ЈаваСцрипт-ове стрелице и регуларне функције су моћни алати који вам помажу да пишете чистији и ефикаснији код.