destul de des trebuie să efectuăm o acțiune similară în multe locuri ale scenariului.de exemplu, trebuie să afișăm un mesaj frumos atunci când un vizitator se conectează, se deconectează și poate în altă parte.funcțiile sunt principalele „blocuri de construcție” ale programului. Acestea permit ca Codul să fie apelat de mai multe ori fără repetare.
Am văzut deja exemple de funcții built-in, cum ar fi alert(message)
, prompt(message, default)
și confirm(question)
. Dar putem crea și funcții proprii.,
declarație funcție
pentru a crea o funcție putem folosi o declarație funcție.
Se pare ca acest lucru:
function showMessage() { alert( 'Hello everyone!' );}
function
cuvinte cheie merge în primul rând, apoi trece numele funcției, apoi o listă de parametrii între paranteze (separate prin virgulă, gol în exemplul de mai sus) și, în sfârșit, codul de funcția, de asemenea, numit „corpul funcției”, între acolade.,
function name(parameters) { ...body...}
noul Nostru funcție poate fi numit după numele său: showMessage()
.
De exemplu:
function showMessage() { alert( 'Hello everyone!' );}showMessage();showMessage();
apel showMessage()
execută codul din funcție. Aici vom vedea mesajul de două ori.acest exemplu demonstrează clar unul dintre scopurile principale ale funcțiilor: evitarea duplicării codului.,
dacă vreodată trebuie să schimbăm mesajul sau modul în care este afișat, este suficient să modificăm codul într-un singur loc: funcția care îl emite.
variabile locale
o variabilă declarată în interiorul unei funcții este vizibilă numai în interiorul acelei funcții.
De exemplu:
Exterior variabile
O funcție poate accesa un exterior variabile precum, de exemplu:
let userName = 'John';function showMessage() { let message = 'Hello, ' + userName; alert(message);}showMessage(); // Hello, John
funcția are acces complet la exterior variabil. Se poate modifica, de asemenea.,
de exemplu:
variabila exterioară este utilizată numai dacă nu există una locală.dacă o variabilă cu același nume este declarată în interiorul funcției, aceasta o umbrește pe cea exterioară. De exemplu, în codul de mai jos funcția utilizează local userName
. Cea exterioară este ignorată:
variabilele declarate în afara oricărei funcții, cum ar fiuserName
în codul de mai sus, se numesc globale.variabilele globale sunt vizibile din orice funcție (cu excepția cazului în care sunt umbrite de localnici).,este o bună practică pentru a minimiza utilizarea variabilelor globale. Codul Modern are puține sau deloc globale. Cele mai multe variabile rezidă în funcțiile lor. Uneori, deși, ele pot fi utile pentru a stoca date la nivel de proiect.
parametrii
putem transmite date arbitrare funcțiilor folosind parametrii (numiți și Argumente funcționale) .
În exemplul de mai jos, funcția are doi parametri: from
și text
.,
atunci Când funcția este numit în linii (*)
și (**)
, valorile date sunt copiate în variabile locale from
și text
. Apoi funcția le folosește.
iată încă un exemplu: avem o variabilă from
și o transmitem funcției., Vă rugăm să rețineți: în funcție de modificările from
, dar schimbarea nu este văzut de afară, pentru că o funcție devine întotdeauna o copie de valoare:
valori Implicite
Dacă un parametru nu este prevăzută, atunci valoarea sa devine undefined
.
De exemplu, menționat anterior funcția showMessage(from, text)
poate fi numit cu un singur argument:
showMessage("Ann");
Asta nu e o eroare. Un astfel de apel ar ieși "*Ann*: undefined"
., Nu există text
, deci se presupune că text === undefined
.,
Dacă vrem să folosim un „default” text
în acest caz, atunci putem specifica că după =
:
function showMessage(from, text = "no text given") { alert( from + ": " + text );}showMessage("Ann"); // Ann: no text given
dacă text
parametru nu este trecut, se va obține valoarea "no text given"
Aici "no text given"
este un șir de caractere, dar poate fi un mult mai complexă exprimare, care este doar evaluate și încadrate dacă acest parametru lipsește., Deci, acest lucru este posibil și:
în JavaScript, un parametru implicit este evaluat de fiecare dată când funcția este apelată fără parametrul respectiv.
În exemplul de mai sus, anotherFunction()
este numit de fiecare dată showMessage()
este numit fără text
parametru.
parametri default alternativi
uneori este logic să setați valori implicite pentru parametri nu în declarația de funcții, ci într-o etapă ulterioară, în timpul executării acesteia.,parametru, ne putem compara cu undefined
:
function showMessage(text) { if (text === undefined) { text = 'empty message'; } alert(text);}showMessage(); // empty message
…Sau am putea folosi ||
operator:
// if text parameter is omitted or "" is passed, set it to 'empty'function showMessage(text) { text = text || 'empty'; ...}
Modern JavaScript motoarele de sprijin nullish coalescență operator ??
, e mai bine când falsy valori, cum ar fi 0
, sunt considerate normale:
se Întoarce o valoare
O funcție poate returna o valoare înapoi în codul de asteptare ca rezultat.,
Cel mai simplu exemplu ar fi o funcție care însumează două valori:
function sum(a, b) { return a + b;}let result = sum(1, 2);alert( result ); // 3
directiva return
poate fi în orice loc din funcție. Când execuția ajunge la ea, funcția se oprește și valoarea este returnată codului de apel (atribuit result
de mai sus).
pot exista mai multe apariții ale return
într-o singură funcție. De exemplu:
este posibil să se utilizeze return
fără o valoare., That causes the function to exit immediately.
For example:
function showMovie(age) { if ( !checkAge(age) ) { return; } alert( "Showing you the movie" ); // (*) // ...}
In the code above, if checkAge(age)
returns false
, then showMovie
won’t proceed to the alert
.,
return
și valoareaPentru o lungă perioadă de expresie în return
, ar putea fi tentant să-l pună pe o linie separată, astfel:
return (some + long + expression + or + whatever * f(a) + f(b))
acest lucru nu funcționează, pentru că JavaScript presupune o virgulă după return
. Aceasta va funcționa la fel ca:
return; (some + long + expression + or + whatever * f(a) + f(b))
deci, devine efectiv o întoarcere goală.,
dacă dorim ca expresia returnată să se înfășoare pe mai multe linii, ar trebui să o pornim la aceeași linie cu return
. Sau cel puțin puneți parantezele de deschidere acolo după cum urmează:
return ( some + long + expression + or + whatever * f(a) + f(b) )
și va funcționa exact așa cum ne așteptăm.
numirea unei funcții
funcțiile sunt acțiuni. Deci numele lor este de obicei un verb. Ar trebui să fie scurt, cât mai exact posibil și să descrie ce face funcția, astfel încât cineva care citește codul să primească o indicație despre ceea ce face funcția.,este o practică larg răspândită de a începe o funcție cu un prefix verbal care descrie vag acțiunea. Trebuie să existe un acord în cadrul echipei cu privire la semnificația prefixelor.
de exemplu, funcțiile care încep cu "show"
arată de obicei ceva.
funcția începând cu…
Exemple de astfel de nume:
cu prefixe în loc, o privire la un nume de funcție dă o înțelegere ce fel de muncă face și ce fel de valoare se întoarce.,
o funcție ar trebui să facă exact ceea ce este sugerat de numele său, nu mai mult.două acțiuni independente merită de obicei două funcții, chiar dacă de obicei sunt numite împreună (în acest caz putem face o a 3-A funcție care le numește pe cele două).
câteva exemple de rupere această regulă:
-
getAge
– ar fi rău dacă se arată unalert
cu vârsta (ar trebui să doar)., -
createForm
– ar fi rău dacă modifică documentul, adăugându-i un formular (ar trebui să-l creeze și să se întoarcă). -
checkPermission
– ar fi rău dacă se afișeazăaccess granted/denied
mesaj (ar trebui să efectueze numai verifice și să se întoarcă rezultatul).aceste exemple presupun semnificații comune ale prefixelor. Tu și echipa ta sunteți liberi să fiți de acord asupra altor semnificații, dar de obicei nu sunt foarte diferite. În orice caz, ar trebui să aveți o înțelegere fermă a ceea ce înseamnă un prefix, ce poate și nu poate face o funcție prefixată., Toate funcțiile prefixate trebuie să respecte regulile. Și echipa ar trebui să împărtășească cunoștințele.
funcțiile care sunt utilizate foarte des au uneori nume ultrascurte.
de exemplu, cadrul jQuery definește o funcție cu $
. Biblioteca Lodash are funcția de bază numită _
.acestea sunt excepții. În general, numele funcțiilor ar trebui să fie concis și descriptiv.
funcții == Comentarii
funcțiile ar trebui să fie scurte și să facă exact un lucru., Dacă acel lucru este mare, poate merită să împărțiți funcția în câteva funcții mai mici. Uneori, respectarea acestei reguli poate să nu fie atât de ușoară, dar este cu siguranță un lucru bun.o funcție separată nu este doar mai ușor de testat și depanat – însăși existența sa este un comentariu minunat!
de exemplu, comparați cele două funcții showPrimes(n)
de mai jos. Fiecare dintre ele emite numere prime până la n
.,
prima variantă folosește o etichetă:
function showPrimes(n) { nextPrime: for (let i = 2; i < n; i++) { for (let j = 2; j < i; j++) { if (i % j == 0) continue nextPrime; } alert( i ); // a prime }}
Cea de-a doua variantă folosește o funcție suplimentară isPrime(n)
pentru a testa pentru primality:
Cea de-a doua variantă este mai ușor de înțeles, nu-i așa? În locul piesei de cod vedem un nume al acțiunii (isPrime
). Uneori oamenii se referă la un astfel de cod ca auto-descriere.deci, funcțiile pot fi create chiar dacă nu intenționăm să le reutilizăm. Ei structurează codul și îl fac lizibil.,
Sumar
O declarație a funcției pare ca acest lucru:
function name(parameters, delimited, by, comma) { /* code */}
- Valorile trecut la o funcție ca parametrii sunt copiate pentru variabilele sale locale.
- o funcție poate accesa variabile exterioare. Dar funcționează numai din interior. Codul din afara funcției nu vede variabilele sale locale.
- o funcție poate returna o valoare. Dacă nu, atunci rezultatul său este
undefined
.,pentru a face codul curat și ușor de înțeles, se recomandă utilizarea în principal a variabilelor și parametrilor locali în funcție, nu a variabilelor exterioare.este întotdeauna mai ușor de înțeles o funcție care primește parametri, lucrează cu ei și returnează un rezultat decât o funcție care nu primește parametri, dar modifică variabilele exterioare ca efect secundar.denumirea funcției:
- un nume ar trebui să descrie clar ce face funcția. Când vedem un apel de funcție în cod, un nume bun ne dă instantaneu o înțelegere a ceea ce face și se întoarce.,
- o funcție este o acțiune, deci numele funcțiilor sunt de obicei verbale.
- Există mai multe bine-cunoscute funcția prefixe ca
create…
,show…
,get…
,check…
și așa mai departe. Folosiți-le pentru a sugera ce face o funcție.
funcțiile sunt principalele blocuri de script-uri. Acum am acoperit elementele de bază, astfel încât să putem începe să le creăm și să le folosim. Dar acesta este doar începutul căii. Vom reveni la ele de multe ori, mergând mai adânc în caracteristicile lor avansate.
Lasă un răspuns