Funcţie()

O funcție este un container de declarații de cod care pot fi invocate utilizând parantezele () operator. Parametrii pot fi transmise în interiorul parantezelor în timpul invocării, astfel încât instrucțiunile din funcție să poată accesa anumite valori atunci când funcția este invocată.

În următorul cod, creăm două versiuni ale unui addNumbers funcția objectone folosind nou operator și altul folosind modelul literar mai comun. Ambii așteaptă doi parametri. În fiecare caz, invocăm funcția, parcurgând parametrii în paranteze () operator.

Mostră: sample76.html

 

O funcție poate fi folosită pentru a returna o valoare, a construi un obiect sau ca un mecanism pentru a rula codul. JavaScript are mai multe utilizări pentru funcții, însă în forma sa cea mai de bază o funcție este pur și simplu un domeniu unic de declarații executabile.


Funcţie() Parametrii

Funcţie() constructor are un număr nedeterminat de parametri, dar ultimul parametru așteptat de către Funcţie() constructorul este un șir care conține instrucțiuni care cuprind corpul funcției. Orice parametri transferați constructorului înainte de ultima vor fi disponibili pentru funcția creată. De asemenea, este posibil să trimiteți mai mulți parametri ca șir separat prin virgulă.

În codul următor, contrazic utilizarea Funcţie() constructorul cu modelele mai comune de instanțiere a unui obiect de funcție.

Mostră: sample77.html

 

Folosirea directă a Funcţie() constructorul nu este recomandat sau realizat de obicei pentru că va fi folosit de JavaScript eval () pentru a analiza șirul care conține logica funcțiilor. Mulți consideră eval () a fi inutile. În cazul în care este în uz, un defect în proiectarea codului este foarte posibil.

Utilizarea Funcţie() constructor fără nou cuvântul cheie are același efect ca și utilizarea numai a constructorului pentru a crea obiecte funcționale (Funcție nouă ("x", "întoarcere x") vs. (('x', 'return x')).

Nu se creează nicio închidere atunci când se invocă Funcţie() constructor direct.


Funcţie() Proprietăți și metode

Obiectul funcției are următoarele proprietăți (fără a include proprietățile și metodele moștenite):

Proprietăți (Function.prototype;):

  • prototip

Proprietățile și metodele instanței obiectului funcției

Instanțele de obiecte de funcții au următoarele proprietăți și metode (fără a include proprietățile și metodele moștenite):

Proprietăți de instanță (Var myFunction = funcția (x, y, z) ; myFunction.length;):

  • argumente
  • constructor
  • lungime

Metode de instanță (Var myFunction = funcția (x, y, z) ; myFunction.toString ();):

  • aplica()
  • apel()
  • toString ()

Funcții Întoarceți întotdeauna o valoare

În timp ce este posibil să se creeze o funcție pur și simplu pentru a executa declarații de cod, de asemenea, foarte frecvente pentru o funcție de a returna o valoare. În următorul exemplu, returnează un șir din spune bună funcţie.

Mostră: sample78.html

 

Dacă o funcție nu specifică o valoare de retur, nedefinit este returnat. În exemplul următor, numim scheunat care înregistrează șirul "yelp" în consola fără a returna în mod explicit o valoare.

Mostră: sample79.html

 

Conceptul de a lua aici aici este că toate funcțiile returnează o valoare, chiar dacă nu oferiți în mod explicit o valoare pentru a reveni. Dacă nu specificați o valoare pentru returnare, valoarea returnată este nedefinit.


Funcțiile sunt cetățeni de primă clasă (nu doar sintaxa, ci valori)

În JavaScript, funcțiile sunt obiecte. Aceasta înseamnă că o funcție poate fi stocată într-o variabilă, matrice sau obiect. De asemenea, o funcție poate fi transmisă și returnată de la o funcție. O funcție are proprietăți deoarece este un obiect. Toți acești factori fac funcții de cetățeni de primă clasă în JavaScript.

Exemplu: sample80.html

 

Este esențial să înțelegeți că o funcție este un obiect și deci o valoare. Acesta poate fi trecut în jur sau mărit ca orice altă expresie din JavaScript.


Transmiterea parametrilor unei funcții

Parametrii sunt vehicule pentru trecerea valorilor în sfera de aplicare a unei funcții atunci când este invocată. În exemplul următor vom invoca addFunction (). Deoarece am predefinit-o pentru a lua doi parametri, două valori adăugate devin disponibile în domeniul său de aplicare.

Mostră: sample81.html

 

Spre deosebire de alte limbi de programare, în JavaScript este perfect legal să omiteți parametrii, chiar dacă funcția a fost definită pentru a accepta aceste argumente. Parametrii lipsă sunt pur și simplu date nedefinit. Desigur, lăsând valori pentru parametri, este posibil ca funcția să nu funcționeze corect.

Dacă treceți o funcție de parametri neașteptate (cei care nu au fost definiți când a fost creată funcția), nu va apărea o eroare. Și este posibil să accesăm acești parametri din argumente obiect, care este disponibil pentru toate funcțiile.


acest și argumente Valorile sunt disponibile pentru toate funcțiile

În interiorul sferei și al tuturor funcțiilor, acest și argumente sunt disponibile valori.

argumente obiect este un obiect de tip array care conține toți parametrii care sunt transmiși către funcție. În următorul cod, chiar dacă am renunța la specificarea parametrilor când definim funcția, putem să ne bazăm pe argumente matricea a trecut la funcția de accesare a parametrilor dacă este trimisă la invocare.

Mostră: sample82.html

 

acest cuvânt cheie, trecut la toate funcțiile, este o referință la obiectul care conține funcția. Așa cum v-ați putea aștepta, funcțiile conținute în obiecte ca proprietăți (metode) pot folosi acest pentru a obține o referință la obiectul părinte. Atunci când o funcție este definită în domeniul global, valoarea lui acest este obiectul global. Examinați următorul cod și asigurați-vă că înțelegeți ce acest se întoarce.

Mostră: sample83.html

 

arguments.callee Proprietate

argumente obiectul are o proprietate numită callee, care este o referință la funcția care se execută în prezent. Această proprietate poate fi utilizată pentru a face referire la această funcție din interiorul scopului funcției (arguments.callee) o auto-referință. În următorul cod, vom folosi această proprietate pentru a obține o referință la funcția de apelare.

Mostră: sample84.html

 

Acest lucru poate fi util când o funcție trebuie să fie numită recursiv.


Instanța funcției lungime Proprietăți și arguments.length

argumente obiect are un unic lungime proprietate. În timp ce s-ar putea să credeți că această proprietate de lungime vă va da numărul de argumente definite, ea de fapt dă numărul de parametri expediați funcției în timpul invocării.

Exemplu: sample85.html

 

Utilizarea lungime proprietatea tuturor Funcţie() de exemplu, putem să luăm de fapt numărul total de parametri pe care funcția așteaptă.

Mostră: sample86.html

 

arguments.length proprietatea a fost depreciată în JavaScript 1.4, dar numărul de argumente trimise unei funcții poate fi accesat de la lungime proprietatea obiectului de funcție. Deplasându-vă în față, puteți obține valoarea lungimii prin utilizarea pârghiei callee proprietate pentru a obține mai întâi o referință la funcția invocată (arguments.callee.length).


Redefinirea parametrilor funcției

Parametrii funcțiilor pot fi redefiniți în interiorul funcției fie direct, fie prin utilizarea funcției argumente matrice. Aruncați o privire la acest cod:

Mostră: sample87.html

 

Observați că pot redefini valoarea parametrului de bare folosind argumente index sau prin realocarea directă a unei noi valori a parametrului.


Întoarceți o funcție înainte de a termina (anulați executarea funcției)

Funcțiile pot fi anulate în orice moment în timpul invocării, utilizând întoarcere cuvânt cheie cu sau fără o valoare. În exemplul următor, anulează adăuga dacă parametrii sunt nedefiniți sau nu sunt numere.

Exemplu: sample88.html

 

Conceptul de a lua aici aici este că puteți anula execuția unei funcții utilizând întoarcere cuvânt cheie în orice moment în execuția funcției.


Definirea unei funcții (declarație, expresie sau constructor)

O funcție poate fi definită în trei moduri diferite: un constructor de funcții, o instrucțiune de funcție sau o expresie a funcției. În exemplul următor, demonstrez fiecare variație.

Mostră: sample89.html

 

Unii au spus că există un al patrulea tip de definiție pentru funcții, numit "expresia funcției numită". O expresie a funcției numită este pur și simplu o expresie a funcției care conține și un nume (de ex., var add = funcția add (x, y) return x + y).


Invocarea unei funcții (funcție, metodă, constructor sau apel() și aplica())

Funcțiile sunt invocate folosind patru scenarii sau modele diferite.

  • Ca o funcție
  • Ca metodă
  • Ca constructor
  • Utilizarea aplica() sau apel()

În următorul exemplu, examinăm fiecare dintre aceste modele de invocare.

Mostră: sample90.html

 

Asigurați-vă că sunteți conștient de toate cele patru modele de invocare, deoarece codul pe care îl veți întâlni poate conține oricare dintre ele.


Funcții anonime

O funcție anonimă este o funcție care nu are un identificator. Funcțiile anonime sunt utilizate în principal pentru trecerea funcțiilor ca parametru la o altă funcție.

Mostră: sample91.html

 

Exprimarea funcției de sincronizare

O expresie a funcției (cu adevărat orice funcție, cu excepția unei funcții creată din Funcţie() constructor) poate fi invocat imediat după definiție prin utilizarea operatorului parantezelor. În următorul exemplu, creăm un sayWord () expresia funcției și apoi invocă imediat funcția. Aceasta este considerată a fi o funcție de auto-invocare.

Exemplu: sample92.html

 

Declarații de funcționare anonime prin auto-invocare

Este posibil să creați o declarație de funcție anonimă care este invocată în mod automat. Aceasta se numește o funcție anonimă invocată de sine. În următorul exemplu, creăm câteva funcții anonime care sunt invocate imediat.

Mostră: sample93.html

 

Conform standardului ECMAScript, parantezele din jurul funcției (sau orice altceva care transformă funcția într-o expresie) sunt necesare dacă funcția trebuie invocată imediat.


Funcțiile pot fi înmormântate

Funcțiile pot fi imbricate în interiorul altor funcții pe o perioadă nedeterminată. În exemplul de cod următor, încapsulează goo funcționează în interiorul bar funcția, care este în interiorul foo funcţie.

Mostră: sample94.html

 

Simplul concept aici este că funcțiile pot fi imbricate și nu există nici o limită a gradului de adâncime a cuiburilor.

Amintiți-vă, valoarea lui acest pentru funcțiile imbricate va fi obiectul principal ( fereastră obiect într-un browser web) în JavaScript 1.5, ECMA-262, Ediția 3.


Trecerea funcțiilor la funcții și a funcțiilor de returnare de la funcții

După cum sa menționat anterior, funcțiile sunt cetățeni de primă clasă în JavaScript. Și deoarece o funcție este o valoare și o funcție poate fi trecută prin orice valoare, o funcție poate fi transferată unei funcții. Funcțiile care iau și / sau returnează alte funcții sunt denumite uneori funcții de ordin superior.

În următorul cod, trecem o funcție anonimă la foo funcția pe care o vom întoarce imediat de la foo funcţie. Este această funcție anonimă ca variabila bar arată, de atunci foo acceptă și apoi returnează funcția anonimă.

Mostră: sample95.html

 

Deci când bar este invocată, invocă funcția anonimă care a fost transmisă foo () funcția, care este apoi trecut din spate foo () funcția și referință de la bar variabil. Toate acestea sunt pentru a arăta faptul că funcțiile pot fi transmise la fel ca orice altă valoare.


Invocarea instrucțiunilor de funcționare înainte de a fi definite (numită și funcția de ridicare a funcțiilor)

O instrucțiune de funcție poate fi invocată în timpul executării înainte de definiția sa reală. Acest lucru este un pic ciudat, dar ar trebui să fiți conștient de acest lucru, astfel încât să puteți influența acest lucru sau, cel puțin, să știți ce se întâmplă atunci când îl întâlniți. În exemplul următor, invoc sayYo () și sumă() funcții înainte de a fi definite.

Mostră: sample96.html

 

Acest lucru se întâmplă deoarece, înainte de a se executa codul, instrucțiunile de funcții sunt interpretate și adăugate în stack / context de execuție. Asigurați-vă că sunteți conștienți de acest lucru pe măsură ce folosiți instrucțiunile de funcții.

Funcțiile definite ca expresii de funcții nu sunt ridicate. Numai instrucțiunile de funcții sunt ridicate.


O funcție poate să se numească (aka Recursion)

Este perfect legitim ca o funcție să se numească. De fapt, acest lucru este adesea folosit în modele de codificare binecunoscute. În codul care urmează, vom da startul countDownFrom care apoi se numește prin numele funcției countDownFrom. În esență, aceasta creează o buclă care scade de la 5 la 0.

Mostră: sample97.html

 

Ar trebui să fiți conștienți de faptul că este firesc ca o funcție să se invocă singură (aka recursion) sau să facă acest lucru în mod repetitiv.


Concluzie

Funcțiile sunt unul dintre cele mai utilizate aspecte ale JavaScript, sperăm că acum aveți o mai bună înțelegere a modului de utilizare a acestora.

Cod