Funcții procedurale
La început erau funcții ...
Aproape fiecare limbaj de programare are o construcție similară cu aceasta. Fiecare programator din lume este familiarizat cu această sintaxă. "salut" este numele funcției noastre, dar ce se întâmplă dacă vom crea salut în același mod ca și variabila?
Funcționează ca variabile
Aceasta ar putea fi o sintaxă puțin familiarizată, dar majoritatea programatorilor ar trebui să fie confortabili cu o funcție care este definită ca o variabilă.
Acesta va avea aceleași capacități și poate fi trecut ca parametru pentru funcții, ca orice altă variabilă.
Transferarea funcțiilor către funcții
Dacă declarăm "salut" ca o variabilă, putem să o transmitem ca parametru funcției.
Există două moduri de a utiliza o funcție ca argument. Puteți trece un indicator la funcția însăși sau puteți executa o funcție care va readuce funcția în sine. În exemplul de mai sus, indicatorul "salut" este transferat la variabila "ce" în funcția "spune". "Ce" a devenit un pointer pentru a "salut".
Acest exemplu "blochează" handlerul "doSomething" în evenimentul onclick. Pentru că folosim doar numele funcției și nu chemarea acesteia. Pe de altă parte, dacă "doSomething ()" a returnat și o funcție, atunci totul ar funcționa bine.
Funcții anonime
Aceasta va crea un handler pentru evenimentul cu click de mouse. Atunci când butonul este apăsat, această funcție va fi apelată, este anonimă, pentru că nu-i declarăm numele și nu o putem numi mai târziu decât prin intermediul onmousedown.
Funcția de apelare automată
Uită-te la următorul cod
Rețineți că "x" nu va conține o funcție anonimă, ci rezultatul muncii sale. Funcția anonimă a existat suficient pentru a transfera rezultatul lucrării sale la variabila "x".
Iată un exemplu mai realist:
Funcția creează un element de script pe pagină și încarcă un script de terță parte în ea. În acest caz, funcția însăși nu există după executarea acesteia și nu ocupă memorie. Acest lucru este foarte convenabil, de exemplu, atunci când funcția este necesară doar o singură dată și nu există dorința de a veni cu un nume pentru aceasta.
De asemenea, puteți utiliza funcția anonimă de auto-apel atunci când trebuie să faceți procesarea oricăror date înainte de a le trimite la această funcție.
În acest exemplu, se numește un doAlert normal, dar se numește ca parametru prin folosirea unei funcții de apelare anonimă. Desigur, astfel puteți apela nu numai funcții anonime:
Ce este echivalent cu apelul funcției tradiționale în alte limbi de programare
Făcând înainte, voi spune că încheierea oricărui cod în funcție, limitează domeniul variabilelor sale, ceea ce este foarte convenabil pentru partajarea diferitelor biblioteci (jQuery, Prototype).
Cele mai multe pluginuri jQuery sunt scrise într-un mod similar, ceea ce face posibilă utilizarea lor cât mai mult posibil compatibile cu alte cadre. Dar, desigur, nimic nu vă împiedică să scrieți în același stil și pe prototip.
Înțelegerea indicatorului funcției
Variabila copiedFunction este un indicator pentru blocul de memorie în care funcționează funcția originalFunction "hello world". Când vom schimba mai târziu funcția originală la "goodbyeworld" atunci copiedFunction returnează un pointer la funcția inițială "hello world".
Domeniul de aplicare al funcției
Atenție: Dacă declarați o nouă variabilă fără cuvântul cheie "var", atunci această variabilă este una dintre proprietățile obiectului ferestrei globale și este disponibilă la nivel global.
În plus, funcția poate fi numită ca window.subFunction ();
Funcția ca obiect
myArray este un obiect care are proprietăți și metode care sunt comune tuturor matricelor și care pot fi extinse. Atunci când buclele prin buclele myArray obținem numai proprietățile ("unul", "doi", "trei") nu fac parte din matrice, ele sunt doar proprietățile obiectului său. Pentru a nu depăși limitele arrayului myArray, am folosit proprietatea .length pentru a găsi numărul de elemente din ea.
Obiecte și metode de lucru
Fiecare funcție are următoarele proprietăți:
argumente - array / object care conțin argumente transmise funcției
arguments.length - Stochează numărul de argumente într-un matrice
arguments.callee - un indicator al funcției care trebuie executată (permite utilizarea funcțiilor anonime recursiv).
lungime - numărul de argumente așteptate ale funcției myFunc (x, y) = 2.
constructor - pointer la constructorul de funcții.
prototip - vă permite să creați prototipuri pentru toate obiectele.
Fiecare funcție are următoarele metode:
aplicație este o metodă care vă permite să transmiteți mai ușor argumente unei funcții (argumentele sunt date ca o matrice și atunci când vă permite să modificați domeniul global al funcției, adică vă permite să apelați funcțiile într-un context diferit).
apelul este același ca se aplică, numai argumentele sunt prezentate separat ca în funcția normală.
toSource - returnează textul sursă al funcției ca șir.
toString - returnează textul sursă al funcției ca șir.
valueOf - returnează textul sursă al funcției ca șir.
Înțelegerea argumentelor funcției
Dacă există o funcție declarată
Puteți apela funcția după cum urmează.
Dacă funcția myFunc (1) a fost apelată, atunci b și c vor fi de tip "undefined" și o puteți vedea în mai multe moduri.
După cum puteți vedea, "nedefinit" este o condiție falsă, astfel încât să puteți utiliza operatorii logici pentru a detecta dacă argumentul nu a fost setat și remediați-l. A treia metodă de verificare este cea mai sigură modalitate de a găsi argumente nedefinite, deoarece 1 și 2 nu funcționează corect pentru false, '' și 0.
lungimea și proprietățile arguments.length vă permit să verificați numărul așteptat de argumente și numărul de argumente care au trecut efectiv. De exemplu:
După cum puteți vedea, funcția așteaptă 3 argumente, dar numai 1!
Folosind matricea de argumente
În exemplul nostru, de mai sus, a, b și c sunt reprezentate de variabilele pe care le-am folosit pentru a obține primele trei argumente. Dacă argumentele sunt mai mici decât se așteptau, atunci variabilele vor fi setate la "undefined", în cazul în care există mai mult decât se aștepta, ele vor fi în continuare disponibile pentru noi în array-urile de argumente
Experiența arată că matricea argumentelor nu are toate proprietățile și metodele disponibile pentru rețelele obișnuite, deci dacă doriți să utilizați metode (sortare, splice, felie etc.), trebuie să faceți următoarele:
Cum să treci argumentele unei funcții la alta
Din când în când, cineva întreabă cum să transmită argumentele unei funcții ca argumentare la altul. De exemplu:
Iată 10 argumente în MyFunc și myFunc încearcă să le transmită altui Func, dar mai degrabă trece argumentele sale ca o matrice, mai degrabă decât ca o listă de argumente. Putem schimba acest lucru apelând metoda aplicării, care va transmite o serie de argumente ca o listă de argumente pentru o nouă funcție