melko usein meidän täytyy suorittaa samanlainen toiminta monissa skriptin paikoissa.
esimerkiksi pitää näyttää mukavan näköinen viesti, Kun vierailija kirjautuu sisään, kirjautuu ulos ja ehkä jonnekin muualle.
toiminnot ovat ohjelman tärkeimmät ”rakennuspalikat”. Niiden avulla koodia voi kutsua monta kertaa ilman toistoa.
Olemme jo nähneet esimerkkejä siitä, rakennettu-in toimintoja, kuten alert(message)
, prompt(message, default)
ja confirm(question)
. Mutta voimme luoda myös omia toimintoja.,
Funktioilmoitus
funktion luomiseksi voimme käyttää funktioilmoitusta.
Se näyttää tältä:
function showMessage() { alert( 'Hello everyone!' );}
function
avainsana menee ensin, sitten menee funktion nimi, sitten luettelo parametrit ovat sulkeissa (pilkulla erotettuna, tyhjä yllä olevassa esimerkissä) ja lopuksi koodi toiminto, myös nimeltään ”toiminto elin”, aaltosulkeiden välissä.,
function name(parameters) { ...body...}
uusi funktio voidaan kutsua sen nimellä: showMessage()
.
esimerkiksi:
function showMessage() { alert( 'Hello everyone!' );}showMessage();showMessage();
call showMessage()
suorittaa code toiminta. Tässä näemme viestin kaksi kertaa.
Tämä esimerkki osoittaa selvästi yksi tärkeimmistä tarkoituksiin toimintoja: voit vähentää koodin päällekkäisyyksiä.,
Jos joskus täytyy muuttaa viestiä tai tapaa, jolla se näytetään, riittää koodin muokkaaminen yhteen paikkaan: funktio, joka sen lähettää.
paikalliset muuttujat
funktion sisällä ilmoitettu muuttuja näkyy vain kyseisen funktion sisällä.
esimerkiksi:
Ulompi muuttujat
– toimintoa voi käyttää ulko-muuttuja, esim:
let userName = 'John';function showMessage() { let message = 'Hello, ' + userName; alert(message);}showMessage(); // Hello, John
– toiminto on täysi pääsy ulko-muuttuja. Se voi myös muokata sitä.,
esimerkiksi:
ulompaa muuttujaa käytetään vain, jos paikallista muuttujaa ei ole.
Jos funktion sisällä ilmoitetaan saman niminen muuttuja, se varjostaa ulompaa. Esimerkiksi alla olevassa koodissa funktio käyttää paikallista userName
. Ulompi yksi ei huomioida:
Muuttujat julisti ulkopuolella mitään toimintoa, kuten ulko – userName
koodi edellä, kutsutaan maailmanlaajuinen.
globaalit muuttujat näkyvät mistä tahansa funktiosta (paitsi jos paikalliset varjostavat).,
on hyvä käytäntö minimoida globaalien muuttujien käyttö. Nykyaikaisella koodilla on vain vähän tai ei lainkaan globaaleja. Useimmat muuttujat asuvat funktioissaan. Joskus niistä voi kuitenkin olla hyötyä projektitason tietojen tallentamisessa.
Parametrit
Voimme välittää mielivaltaisia tietoja toimintoja käyttämällä parametrit (myös kutsutaan funktion argumentit) .
alla olevassa esimerkissä funktiolla on kaksi parametria: from
ja text
.,
Kun toiminto on nimeltään rivit (*)
ja (**)
, arvot kopioidaan paikallisia muuttujia from
ja text
. Sitten funktio käyttää niitä.
Tässä on yksi esimerkki: meillä on muuttuja from
ja siirtää sen toimintaa., Huomaa: toiminto muuttaa from
, mutta muutos ei ole nähnyt ulkopuolella, koska funktio saa aina kopion arvo:
oletusarvot
Jos parametri ei ole annettu, niin sen arvo tulee undefined
.
esimerkiksi, edellä mainittu toiminto showMessage(from, text)
voidaan kutsua yhdellä perustelu:
showMessage("Ann");
Se ei ole virhe. Tällainen puhelu lähtisi "*Ann*: undefined"
., Ei ole text
, niin oletetaan, että text === undefined
.,
Jos haluamme käyttää ”default” text
tässä tapauksessa, voimme määrittää sen jälkeen =
:
function showMessage(from, text = "no text given") { alert( from + ": " + text );}showMessage("Ann"); // Ann: no text given
Nyt, jos text
parametri ei ole kulunut, se saa arvon "no text given"
Täältä "no text given"
on merkkijono, mutta se voi olla monimutkaisempi ilmaisu, joka on vain arvioitu ja määritetty, jos parametri puuttuu., Niin, tämä on myös mahdollista.
JavaScript, oletuksena parametri on arvioitava joka kerta, kun funktiota kutsutaan ilman kunkin parametrin.
yllä olevassa esimerkissä anotherFunction()
kutsutaan joka kerta showMessage()
kutsutaan ilman text
parametri.
Vaihtoehtoinen oletus parametrit
Joskus on järkevää asettaa oletusarvot parametreja ei toimintaa-ilmoitus, mutta myöhemmässä vaiheessa, sen toteutuksen aikana.,parametri, voimme verrata sitä undefined
:
function showMessage(text) { if (text === undefined) { text = 'empty message'; } alert(text);}showMessage(); // empty message
…Tai sitten voimme käyttää ||
operaattori:
// if text parameter is omitted or "" is passed, set it to 'empty'function showMessage(text) { text = text || 'empty'; ...}
Moderni JavaScript-moottorit tukea nullish sommittelee operaattori ??
, se on parempi, kun falsy arvot, kuten 0
, pidetään säännöllisesti:
Paluu arvo
funktio voi palauttaa arvon takaisin kutsuvan koodin tuloksena.,
yksinkertaisin esimerkki voisi olla funktio, joka kuvaa kaksi-arvot:
function sum(a, b) { return a + b;}let result = sum(1, 2);alert( result ); // 3
direktiivi return
voi olla missä tahansa toiminnon. Kun suoritus saavuttaa se, toiminto pysähtyy, ja arvo on palauttaa kutsuvan koodin (osoitetut result
edellä).
return
saattaa esiintyä useita esiintymiä yhdessä funktiossa. Esimerkiksi:
on mahdollista käyttää return
ilman arvoa., 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
arvopitkään ilmaisun return
se voi olla houkuttelevaa laittaa se erillinen linja, kuten tämä:
return (some + long + expression + or + whatever * f(a) + f(b))
Se ei toimi, koska JavaScript olettaa, puolipiste jälkeen return
. Se toimii sama kuin:
return; (some + long + expression + or + whatever * f(a) + f(b))
Niin, se tehokkaasti tulee tyhjä palata.,
Jos haluamme palasi ilmaisun kääri yli useita rivejä, meidän pitäisi aloittaa se samalla linjalla kuin return
. Tai ainakin laittaa avaaminen suluissa on seuraava:
return ( some + long + expression + or + whatever * f(a) + f(b) )
Ja se toimii juuri niin kuin olemme odottaneet sitä.
funktion nimeäminen
funktiot ovat toimintoja. Heidän nimensä on siis yleensä verbi. Sen pitäisi olla lyhyt, mahdollisimman tarkkoja ja kuvata, mitä toiminto tekee, niin, että joku lukee koodin saa viitteitä siitä, mitä toiminto tekee.,
on yleinen käytäntö aloittaa funktio verbaalisella etuliitteellä, joka kuvaa toimintaa epämääräisesti. Joukkueessa täytyy olla sopimus etuliitteiden merkityksestä.
esimerkiksi toiminnot, jotka alkavat "show"
yleensä näyttää jotain.
– Toiminnon alkaen.
Esimerkkejä tällaisista nimistä:
etu paikka, vilkaisu funktion nimi antaa ymmärtää, millaista työtä se tekee ja millaista arvoa se palaa.,
funktion tulee tehdä juuri niin kuin sen nimi viittaa, ei enempää.
kaksi itsenäistä toimintoa ansaitsevat yleensä kaksi toimintoa, vaikka ne yleensä kutsutaan yhteen (tällöin voimme tehdä 3.funktion, joka kutsuu näitä kahta).
muutamia esimerkkejä rikkoo tätä sääntöä:
-
getAge
– olisi huono, jos se näyttääalert
ikä (pitäisi vain saada)., -
createForm
– olisi huono, jos se muuttaa asiakirjan lisääminen-lomake (pitäisi vain luoda se ja palauta). -
checkPermission
– olisi huono, jos se näyttääaccess granted/denied
viesti (pitäisi vain suorittaa tarkistaa ja palauttaa tuloksen).
nämä esimerkit olettavat etuliitteiden yhteisiä merkityksiä. Sinä ja tiimisi voitte vapaasti sopia muista merkityksistä, mutta yleensä ne eivät ole kovin erilaisia. Joka tapauksessa, sinun pitäisi olla vankka käsitys siitä, mitä etuliite tarkoittaa, mitä etuliite funktio voi ja ei voi tehdä., Kaikkien same-prefiksattujen toimintojen tulisi noudattaa sääntöjä. Ja joukkueen pitäisi jakaa tietoa.
Toimintoja, joita käytetään hyvin usein, joskus on ultrashort nimet.
esimerkiksi jQuery framework määrittelee funktion, jossa on $
. Lodashin kirjaston ydintoiminto on nimeltään _
.
nämä ovat poikkeuksia. Yleensä funktioiden nimien tulee olla ytimekkäitä ja kuvailevia.
funktiot == Kommentit
funktioiden pitäisi olla lyhyitä ja tehdä tasan yksi asia., Jos se on iso, ehkä funktio kannattaa jakaa muutamaan pienempään funktioon. Joskus tämän säännön noudattaminen ei ehkä ole niin helppoa, mutta se on ehdottomasti hyvä asia.
erillinen toiminto ei ole vain helpompi testata ja debug – sen olemassaolo on hyvä kommentti!
vertaa esimerkiksi kahta funktiota showPrimes(n)
alla. Jokainen lähdöt alkulukuja jopa n
.,
ensimmäinen variantti käyttää label:
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 }}
toinen vaihtoehto käyttää ylimääräinen toiminto isPrime(n)
testaa primality:
toinen vaihtoehto on helpompi ymmärtää, ei ole se? Koodikappaleen sijaan näemme toimen nimen (isPrime
). Joskus ihmiset viittaavat sellaiseen koodiin kuin itsensä kuvaamiseen.
joten toimintoja voidaan luoda, vaikka emme aikoisikaan käyttää niitä uudelleen. Ne jäsentävät koodin ja tekevät siitä luettavan.,
Tiivistelmä
tehtävä ilmoitus näyttää tältä:
function name(parameters, delimited, by, comma) { /* code */}
- Arvot välitetään funktion parametrit kopioidaan sen paikallisia muuttujia.
- funktio voi päästä ulkoisiin muuttujiin. Mutta se toimii vain sisältä päin. Funktion ulkopuolella oleva koodi ei näe sen paikallisia muuttujia.
- funktio voi palauttaa arvon. Jos ei, niin sen tulos on
undefined
.,
Jotta koodi on puhdas ja helppo ymmärtää, se on suositeltavaa käyttää lähinnä paikalliset muuttujat ja parametrit toiminto, ei ulompi muuttujia.
Se on aina helpompi ymmärtää toiminto, joka saa parametrit, toimii ne ja palauttaa tuloksen kuin toiminto, joka ei saa parametreja, mutta muuttaa ulompi muuttujia kuin haittavaikutus.
funktion nimi:
- nimen tulee selkeästi kuvata, mitä funktio tekee. Kun näemme funktiokutsun koodissa, hyvä nimi antaa heti ymmärtää, mitä se tekee ja palauttaa.,
- funktio on toiminta, joten funktioiden nimet ovat yleensä sanallisia.
- On olemassa monia tunnettu toiminto etuliitteitä, kuten
create…
,show…
,get…
,check…
ja niin edelleen. Käytä niitä vihjaamaan, mitä toiminto tekee.
funktiot ovat komentosarjojen päärakennuspalikoita. Nyt olemme käsitelleet perusasiat, joten voimme todella alkaa luoda ja käyttää niitä. Mutta se on vasta polun alku. Aiomme palata niihin monta kertaa, menee syvemmälle niiden kehittyneitä ominaisuuksia.
Vastaa