Cum să descrie funcția
Funcții cu nume sunt disponibile peste tot în domeniul de aplicare
Proprietățile funcțiilor disponibile în funcție, astfel încât acestea să poată fi utilizate ca variabile statice.
La începutul fiecărei funcții creează în sine o variabilă argumente și atribuie referire arguments.callee la sine. Deci arguments.callee.test - func.test proprietate. și anume testul variabilă statică.
În exemplul era imposibil să facă asignarea:
ca această operațiune ar ++ declanșată de testul variabilă locale. și nu pe proprietatea caracteristicilor obiectelor de testare.
argumentele obiect mai conține argumente și pot fi convertite într-o matrice (deși nu este), acest lucru - de mai jos, în secțiunea referitoare la parametrii.
Fiecare funcție, sau mai degrabă chiar orice funcție de pornire stabilește domeniul lor de aplicare individuală.
Variabilele pot fi declarate oriunde. Var de cuvinte cheie specifică variabila în domeniul de aplicare curent. Dacă o uitați, veți obține o variabilă globală de fereastră. intersecția neașteptate posibile cu alte variabile fereastră, conflicte și bug-uri.
Spre deosebire de o serie de limbi, blocurile nu specifică un domeniu de aplicare separat. Nu contează - variabila definită în interiorul unității sau în afara acesteia. Deci, aceste două piese sunt complet echivalente:
Setați prin variabila var este vizibil peste tot în domeniul de aplicare, chiar înainte de declarația var. De exemplu, să facă o funcție care va schimba variabila, var pentru care este de mai jos.
Funcțiile pot fi rulate cu orice număr de parametri.
În cazul în care funcțiile date mai puține argumente decât este în definiție, nu există nici considerată nedefinit.
Funcția următoare returnează perioada de timp. aveți nevoie pentru a depăși cursa la distanță, cu o viteză uniformă de viteză.
La prima funcție de pornire funcționează cu distanța = 10 argumente. Viteza = nedefinit. În mod normal, o astfel de situație, în cazul în care este susținută de funcție, oferă o valoare implicită:
Operatorul || în JavaScript nu returnează un adevărat / fals. dar valoarea în sine (în primul rând, care prevede adevărat).
Prin urmare, este folosit pentru a seta valorile implicite. În apelul nostru de viteză este calculat ca nedefinită || 10 = 10.
Prin urmare, rezultatul va fi 10/10 = 1.
A doua lansare - standard.
Cea de a treia lansare stabilește mai multe argumente suplimentare. Caracteristicile nu sunt disponibile pentru a lucra cu argumente suplimentare, astfel încât acestea sunt pur și simplu ignorate.
Ei bine, în acest din urmă caz, argumentele nu, prin urmare, distanța = nedefinit. și împărțirea rezultatului au nedefinit / 10 = NaN (Nu-A-Number, a apărut o eroare).
Chiar în fața funcției corpului creează automat argumentele obiect. care conține
- numesc argumente, pornind de la zero
- Lungimea proprietate Lungime
- O referire la funcția de sine, în proprietatea callee
argumente de proprietate similare matrice, deoarece are o lungime și indici numerici. De fapt, argumentele nu aparține Array și conține metodele sale, cum ar fi împingere. pop, și altele.
Dacă totuși doriți să utilizați aceste metode, de exemplu, pentru a apela o altă funcție cu aceleași argumente, dar altele decât prima, puteți crea o serie de argumente prezente:
Apelați funcția pentru o serie de argumente, puteți utiliza aplică:
Funcția pulmonară poate fi transmisă ca argument pentru o altă funcție.
De exemplu, harta are o funcție FUNC. o aplică fiecărui element al arr matrice și returnează matrice rezultat:
Sau puteți crea o funcție anonimă în cadrul apelului la hartă:
Există funcții ale căror argumente variază foarte mult.
Apelați cu parametri opționali este necesar să se facă acest lucru:
Pentru a evita nule inutile și de a face codul mai ușor de înțeles, folosiți ceva de genul „argumente“ de cuvinte cheie, existente în Python și Ruby. Pentru a face acest lucru, o mulțime de parametri sunt ambalate într-un singur obiect:
Apelul este acum mult mai ușor:
Deci - mult mai clare. Și dacă mai mult de 5 parametri, apoi face - singurul mod normal.
În plus, cu secvența de obiect al apelurilor se poate face mai confortabil cum ar fi:
- versiune printabilă
Bine ai venit! Aș dori un pic pentru a dezvolta o temă:
„“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“
În exemplul era imposibil să facă asignarea:
test de var = arguments.callee.test
testare ++
ca această operațiune ar ++ declanșată de testul variabilă locale, și nu pe funcțiile de proprietate obiect de testare
„“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“ „“
După cum am înțeles, acest lucru se datorează faptului că, chiar dacă atribuiți o variabilă arguments.callee.test de referință la un obiect, apoi continuați în orice tranzacție cu el, de exemplu ++ de testare, acest test va deveni o valoare variabilă, care este un simplu număr (în acest caz), și nu în obiect ca moștenitor. Editați-le, dacă este greșit :)
pentru tipurile simple au următoarea regulă:
dar, în plus față de tipuri simple sunt obiecte și matrice - pentru a le drepturile altora:
Acest lucru se datorează faptului că obiectele și matrice sunt transmise prin referință în loc de valoare
Prin urmare, în cazul în care, în cazul dumneavoastră, este necesar să se facă acest lucru: