ЈаваСцрипт функције
ЈаваСцрипт функције су способне за више од пуке обједињавања гомиле кодова док чекају да се позив изврши. Функције су временом еволуирале, доводећи до нових дефиниција, метода извођења и синтаксе. Овај пост ће покрити неке од постојећих улога које су ЈаваСцрипт функције до сада одиграле.
Познавање различитих начина изражавања и дефинисања функција отвара могућност имплементирати логику на оптималнији начин ин ЈаваСцрипт. Такође, можете лакше одговорити на питања за интервју.
Функција Изрази
Када једноставно наведете функцију са функције
кључна реч, опциони параметри и тело кода, а функције декларације.
Ставите ту декларацију у ЈаваСцрипт израз (као у задатку или аритметичком изразу), он постаје а функције израз.
// функција функције фунцтион_наме () ; // Функцијска израз вар фунцтион_наме = фунцтион () ;
Све ЈаваСцрипт декларације се подижу (померају у опсегу) током евалуације. Стога писање позива функције пре декларације функције је у реду (будући да ће декларација ионако бити премјештена).
фунцтион_наме (); // функција цалл [ВОРКС] функција фунцтион_наме () ;
Међутим, изрази функција нису подигнути јер функције постају дио израза и нису самосталне декларације.
фунцтион_наме (); // функцијски позив [ВОН'Т ВОРК] вар фунцтион_наме = фунцтион () ;
Одмах позвани израз функције (ИИФЕ)
То је израз функције, који се одмах извршава (само једном када се процијени). Можете је креирати једноставним додавањем ()
(синтакса која се користи за позивање функције) одмах након функције. Они могу бити анонимни (без имена са којим га можете назвати).
У наставку су две најчешће синтаксе за креирање ИИФЕ:
(функциа оптионал_фунцтион_наме () // боди ());
и
(фунцтион оптионал_фунцтион_наме () // боди) ();
У загради око декларације функције претвара се у израз, а затим додаје ()
након позива функције. Можете користити друге начине за креирање ИИФЕ-а онолико дуго колико додате ()
након експресије функције (као испод), али префериране методе су горе наведене двије.
// Неки од начина за креирање функције ИИФЕс! () / *… * / (); + фунцтион () / *… * / (); нова функција () / *… * /;
ИИФЕ је идеалан за писање кода који треба да се изврши само једном, распоређивање имена, креирање затварања, креирање приватних променљивих и још много тога. У наставку је приказан примјер кориштења ИИФЕ-а.
вар паге_лангуаге = (функција () вар ланг; / Код за добијање језика странице за враћање ланг;) ();
Код за добијање језика странице извршава се само једном (по могућности након учитавања странице). Резултат је сачуван у паге_лангуаге
за каснију употребу.
Метходс
Када је функција својство објекта, она се зове метода. Пошто је функција и објекат, функција унутар друге функције је такође метода. Испод је пример за метод унутар објекта.
вар цалц = адд: фунцтион (а, б) ретурн а + б, суб: функција (а, б) ретурн а-б цонсоле.лог (цалц.адд (1,2)); // 3 цонсоле.лог (цалц.суб (80,2)); // 78
Тхе додати
и суб
функције су методе цалц
објекат.
Сада за функцију у оквиру функције:
фунцтион адд (а) ретурн фунцтион (б) ретурн а + б; цонсоле.лог (адд (1) (2)); // Излаз је 3
Враћена анонимна функција је метода функције додати
.
Напомена: Од параметра (а
) функције додати
у горњем примеру је доступан за следећу функцију позива, овај тип процеса се зове цурриинг.
Конструктори
Када додате нев
кључну реч пре функције и назовите је, она постаје конструктор који креира инстанце. Испод је пример где се конструктори користе за креирање инстанци Фруит
и вредности се додају сваком од њих Фруит
'с пропертиес.
фунцтион Фруит () вар име, породица; // Научно име и породица тхис.гетНаме = фунцтион () ретурн наме;; тхис.сетНаме = фунцтион (валуе) наме = валуе; тхис.гетФамили = фунцтион () ретурн фамили;; тхис.сетФамили = функција (вредност) фамили = валуе; вар аппле = нев Фруит (); аппле.сетНаме ("Малус доместица"); аппле.сетОбитељ ("Росацеае"); вар оранге = ново воће (); оранге.сетНаме ("Цитрус")¢А ?? А ?? синенсис "); оранге.сетФамили (" Рутацеае "); цонсоле.лог (оранге.гетНаме ());¢А ?? А ?? // "Малус доместица" цонсоле.лог (оранге.гетФамили ()) // // Рутацеае
Функције стрелице (ЕС6 стандард) [Само у Фирефок-у]
Нова дефиниција функције из ЕС6 Стандарда обезбеђује краћу синтаксу за функцијску експресију. Синтакса је
() => / * тело * /
Ова функција узорка:
вар синг = фунцтион () цонсоле.лог ('сингинг…');
исто је као:
вар синг = () => цонсоле.лог ('пева ...');
Функције стрелица су анонимне и немају своје Ово
вредност, Ово
унутра ће бити исто као и Ово
у приложеном коду. Такође, не можете да га промените у конструктору са нев
кључне речи.
Они су корисни када желите Ово
унутар функције да буде иста као и споља и њена краћа синтакса чини код за писање функција унутар функције концизна (као испод)
сетИнтервал (фунцтион () цонсоле.лог ('мессаге'), 1000);
у
сетИнтервал (() => цонсоле.лог ('мессаге'), 1000);
Функције генератора (ЕС6 стандард) [Само у Фирефоку]
Још једна нова дефиниција функције из стандарда ЕС6 је функција генератора. Функције генератора су у стању да зауставе и наставе његово извршавање. Његова синтакса је:
фунцтион * фунцтион_наме ()
или
фунцтион * фунцтион_наме ()
Генераторске функције стварају итераторе. Итератори следећи
Метод се затим користи за извршавање кода унутар функције генератора све до ииелд
кључна реч је достигнута. После тога, поновљена вредност коју је идентификовао ииелд
кључна реч се враћа од стране функције генератора и извршење је заустављено.
Функција генератора се поново извршава када следећи
Метод се зове до следећег ииелд
кључна реч је достигнута. Једном све ииелд
Извршавају се изрази, враћа се добијена вредност недефинисан
.
У наставку је једноставан пример:
фунцтион * генератор_фунц (цоунт) фор (вар и = 0; иЕво још једног примера:
функција * рандомИнцремент (и) принос и + 3; принос и + 5; принос и + 10; принос и + 6; вар итр = рандомИнцремент (4); цонсоле.лог (итр.нект (). валуе); // 7 цонсоле.лог (итр.нект (). Валуе); // 9 цонсоле.лог (итр.нект (). Валуе); // 14Ту је и а
принос *
израз који преноси вриједност на другу функцију генераторафункција * воће (воће) принос * поврће (воће); принос "Грожђе"; функција * поврће (воће) принос воћа + "и шпинат"; принос воћа + "и брокуле"; даје воће + "и краставац"; вар итр = воће ("јабука"); цонсоле.лог (итр.нект (). валуе); // "Аппле анд Спинацх" цонсоле.лог (итр.нект (). Валуе); // "Аппле анд Броццоли" цонсоле.лог (итр.нект (). Валуе); // "Аппле анд Цуцумбер" цонсоле.лог (итр.нект (). Валуе); // "Грапес" цонсоле.лог (итр.нект (). Валуе); //недефинисанФункције генератора су корисне ако желите да прођете кроз вредности једну по једну на жељеној тачки у коду тако што ћете је паузирати, а не у једном покрету као у петљи кроз низ.
Закључак
У наставку сам навео листу референци у којој ћете наћи линкове до референци и чланака који се детаљно обрађују на различите теме одвојено. Обе стандардне функције ЕС6 тренутно ће радити само у Фирефок-у.
Референце
- ЕЦМАСцрипт Лангуаге: Функције и класе
- Одмах позвани функцијски израз (ИИФЕ)
- Основе ЕС6 генератора
- Функције стрелице
- Фунцтион - Мозилла Девелопер Нетворк