Как да се опише функцията

Named функции са достъпни навсякъде в обхвата

Свойства на наличните във функцията функции, така че да могат да се използват като статични променливи.







В началото на всяка функция създава в себе си променливи аргументи и възлага arguments.callee препратка към себе си. Така arguments.callee.test - имот func.test. т.е. статична променлива теста.

В примера, че е невъзможно да се направи задачата:

като тази операция ще ++ предизвикано от локална променлива теста. а не върху имуществото на изпитвания обект функции.

аргументите обект съдържа аргументи и могат да бъдат превърнати в масив (въпреки че не е), това - по-долу в раздела за параметрите.

Всяка функция, или по-скоро, дори всеки стартиране функция определя техния индивидуален характер.

Променливите могат да бъдат обявени за никъде. Var дума определя променливата в настоящия обхват. Ако я забравите, вие ще получите глобална променлива част на прозореца. Възможна неочакван пресичане с други променливи прозорци, конфликти и грешки.

Как да се опише функцията

За разлика от много езици, блоковете не посочват отделно обхват. Без значение - променлива, дефинирана в устройството или извън него. Така че тези две части са напълно еквивалентни:

Задайте чрез Var променлива се вижда навсякъде в обхвата още преди отчета за Var. Например, да направи функция, която ще промени променливата Var, за които е по-долу.

Функциите могат да се изпълняват с произволен брой параметри.

Ако функциите, дадени по-малко аргументи, отколкото е в дефиницията е, че няма счита неопределено.

Следната функция връща период от време. което трябва да се преодолее състезанието разстояние с равномерна скорост скорост.

На първия старт функция работи с дистанционно = 10 аргументи. скорост = неопределено. Обикновено такава ситуация, ако това се поддържа от функцията, осигурява стойност по подразбиране:

Операторът || в JavaScript, не се връща вярно / невярно. но самата стойност (първият, който предвижда вярно).







Поради това се използва за задаване на стойностите по подразбиране. В нашия разговор скорост се изчислява като неопределено || 10 = 10.

Затова резултатът ще бъде 10/10 = 1.

Вторият старт - стандарта.

Третият старта задава няколко допълнителни аргументи. Функциите, не са на разположение за работа с допълнителни аргументи, така че те са просто игнорирани.

Е, в последния случай, аргументите Не, по тази причина, разстоянието = неопределени. и разделяне на резултата са недефинирана / 10 = NaN (не-А-номер, е възникнала грешка).

Точно пред на тялото да функционира автоматично създава аргументите обект. който съдържа

  1. наричаме аргументи, като се започне от нула
  2. Дължина Дължина на имот
  3. Позоваването на самата функция в callee имота

Спорове за собствеността, подобни на масива, защото има по дължина и числени индекси. В действителност, аргументи не принадлежи към Array и съдържа неговите методи, като например тласък. поп, и др.

Ако все пак искате да се използват тези методи, например, да се обади друга функция със същите аргументи, но различно от първото, можете да създадете множество аргументи присъстват:

Обадете се на функцията за множество аргументи, можете да използвате се прилагат:

функция на белия дроб може да се предава като аргумент до друга функция.

Например, карта отнема функция функции. то се отнася до всеки елемент на ARR масив и връща резултат масив:

Или можете да създадете анонимен функция в рамките на поканата за карта:

Има функции, чиито аргументи се различават значително.

Покана с избираеми параметри е необходимо да се направи това:

За да се избегне ненужното нула и да направят кода по-лесно да се разбере, да се използва нещо като "аргументи" за ключови думи, съществуваща в Python и Ruby. За да направите това, много от параметрите са опаковани в един обект:

Поканата сега се прави много по-лесно:

Така че - много по-ясна. И ако повече от 5 параметри, а след това направи - единственият нормален начин.

В допълнение, с цел последователност на разговори може да се направи по-удобно, като:

  • версия за печат

Добре дошли! Бих искал малко да се разработи тема:
"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
В примера, че е невъзможно да се направи задачата:
тест Var = arguments.callee.test
тест ++

като тази операция ще ++ предизвикано от локална променлива тест, а не върху функциите на собственост тест обект
"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
Доколкото разбирам, това се дължи на факта, че дори и да зададете променлива arguments.callee.test препратка към даден обект, а след това продължи в каквито и да било сделки с него, например тест ++, този тест ще се превърне в променлива стойност, която е проста брой (в този случай), а не в обектно като наследник на. Редактирайте тези, ако погрешно :)

за прости видове имат следното правило:

но в допълнение към прости видове са обекти и масиви - за тях правата на другите:

Това е така, защото обектите и масиви се предават чрез позоваване вместо по стойност
Съответно, ако във вашия случай е необходимо да се направи това: