KomputilojProgramado

JavaScript: funkcio en funkcio. JS-Programlingvo

Ideoj pri dinamika enhavo-formado de retpaĝaroj fariĝis la normo. Statikaj paĝoj kaj ŝablono-ejo-dezajno fine kompletigis sian mision.

Tamen, moderna TTT-rimedo ne bezonas esti prezentita per aro de paĝoj, generitaj de la servilo kaj ĝisdatigita de la retumilo (JS + AJAX).

Reteja rimedo, ĉe la momento de alveno de vizitanto, povas esti paro de titoloj por la protokolo, iu teksto en la "kapo", kelkaj linioj de kodo en la "korpo" kaj ĉio. La resto de "koncepti" en la procezo de vizitanto - ĝi estas ideala ejo, aŭ aspirante esti unu.

La loko de priskribo kaj la esenco de funkcioj

опыт, наработаный многими десятилетиями. JavaScript - estas sperto narabotany jardekojn. Ĝi havas signifan evoluan historion, moderna kvalifikita teamo de kreintoj-programistoj. La lingvo estas bone pripensita, fidinda, bela kaj donas la realan ŝancon por la programistoj skribi bonan kodon kaj plibonigi sin mem.

La koncepto de algoritmo ekster la funkcio forestas en komenco. Kompreneble, la programisto povas enmeti skripton ie ajn en la paĝo, metu la kodon en ĝi kaj ĝi estos ekzekutita. страницы? Sed kio estas la punkto en la kodo, kiu estas ekzekutita nur unufoje: kiam ŝargado (reŝargi) la paĝo? Krom se ĝi eblas establi komencajn valorojn de iuj ajn ne signifaj variabloj.

La skripto estas la loko de la priskribo de la necesaj variabloj kaj funkcioj, anstataŭ bona peco de kodo skribita por si mem. Ĝi estas la aro de funkcioj, kiuj estas signifa kaj signifa, eble ilia reciproka rekta rilato, sed pli ofte ĝi estas malsama. La loko de la funkcia priskribo kaj la loko de ĝia apliko ne estas la sama.

Ne necesas, ke la funkcio alvokos alian funkcion rekte, ĝi povas esti farita nerekte tra dinamika kodo-generacio. La vizitanto decidas en la kadro de ĉi tiu kodo kaj tute malsama funkcia sistemo funkcias.

Funkcia dinamiko

Funkcia dinamiko estas ne nur kaj ne tiom da la manipuladoj atribuitaj al la elementoj de la paĝo, ĉi tiuj estas la funkcioj kiuj formas la elementojn de la paĝo, kaj la rektaj manipuladistoj ankaŭ povas ŝanĝi.

La agado en la paĝo disfaldas laŭ siaj elementoj kaj la konduto de la vizitanto sur ĝi. Musaj movadoj, klavaj butonoj, klakoj, elementaj eventoj kaj aliaj cirkonstancoj kondukas al la lanĉo de la postulataj funkcioj.

Komence, ne ekzistas konsistenco kaj ne ekzistas paralela. Ekzistas adekvata reago de la retejo-rimedo al eventoj. Kiom rapide JavaScript plenumos ĉi tiun aŭ tiun funkcion, ĝi dependas de multaj teknikaj (komputilaj, komunikaj linioj) kaj semantikaj (logiko de la algoritmo, subjekto, signifo de la problemo) faktoroj.

Fakte, oni povas argumenti, ke io funkciis paralele, kaj io okazos post io, sed ne estas punkto. Gravas, ke la funkcio de JavaScript estas la kapablo krei adekvatan respondon al vizitantoj.

Ĉi tiu nova pensado en evoluo: distribuita prilaborado de informoj en la internaĵoj de unu retumilo!

Sintakso de variabloj kaj funkcioj

Ĝavaj variabloj estas metitaj ambaŭ en la "skripto" etikedo kaj en la korpo de la funkcio. La funkcioj difinas de la sama maniero. Ne ekzistas speciala signifo por skribi ene de la funkcio, sed tio eble estas necesa por diversaj kaj bone bazitaj kialoj.

La funkcio-priskribo ĝenerale komencas kun la ŝlosila vorto "funkcio", sekvita de ĝia nomo, listo de argumentoj en paréntesis disigitaj de komo, kaj la funkcia korpo en buklaj krampoj.

Ĉi tiu ekzemplo priskribas du funkciojn kiuj provizas AJAX-interŝanĝon inter paĝo kaj servilo. La variablo scXHR estas priskribita supre, do ĝi estas disponebla ambaŭ en InitXML kaj ene de WaitReplySC.

Funkcia nomo kaj funkcia parametro

Asincrona varianto estis prezentita ĉi tie, kiam la funkcio de Javascript en la funkcio nomiĝas post la respondo de la servilo. En ĉi tiu kazo, ricevinte respondon de la servilo, WaitReplySC aliras paĝajn etikedojn, plenigas ilin per informoj ricevitaj kaj alvokas aliajn funkciojn, kiuj eble bone funkciigas la sekvantan peton al la servilo.

Ĉi tie ankaŭ gravas rimarki, ke WaitReplySC estas funkcio. scXHR.onreadystatechange = WaitReplySC она передается как параметр. Sed en linio scXHR.onreadystatechange = WaitReplySC ĝi pasis kiel parametro. Ĉi tio estas ĝenerala regulo por pasi funkciojn al aliaj funkcioj kiel parametroj. Li specifis la krampojn kaj pasigis al ili la parametrojn (parametrojn) - la funkcio ekzekutos tuj. Mi donis nur la nomon, do kio? La alvoko de la funkcio estos farita de tiu, kiu ricevis sian nomon.

La funcionalidad implementado per AJAX, ebligas al vi voki JavaScript funkcio per la datumoj ricevis de la servilo. Fakte, sendante peton al la servilo, ĉi tiu aŭ tiu funkcio eble eĉ ne "scias", kies funkcion aliras kaj kun kiu informo.

Eliri la funkcion kaj ĝian rezulton

En la korpo de la funkcio, vi povas skribi ajnajn lingvajn telefonistojn, kiuj, fakte, estas destinitaj por tio. En la funkcio, variabloj estas haveblaj, kiuj estas priskribitaj interne kaj ekstere, sed ne tiuj priskribitaj en aliaj funkcioj.

Se vi volas ke la funkcio redonu la rezulton, vi povas uzi la rondveturon de JavaScript-operatoro: reveno. Ekzistas sufiĉa nombro da rondaj deklaroj en la korpo de la funkcio. Ne necesas, ke ĉiuj redonas la rezulton de la sama tipo.

Kutime, programistoj tre respektas ĉi tiun eblon kaj, laŭ la situacio, decidas pri lasi la funkcion tuj kiam ĝi fariĝos ebla.

Ne necesas kuri tra la tuta algoritmo de la funkcio, kiam vi povas eliri antaŭe.

Funkcio Argumentoj

Argumentoj en funkcio estas pasitaj per komo-disigita listo, kadrita en krampoj, kaj tuj post ĝia nomo. Variabloj estas uzataj kiel argumentoj, sed valoroj ankaŭ povas esti pasitaj rekte. Por ke JavaScript funkciu al funkcio, vi nur devas specifi ĝian nomon sen krampoj.

Interne la funkcio estas disponebla variablo argumentoj, kiuj havas longitudon proprieto. Vi povas aliri ajnan funkcion argumenton per argumentoj [0], argumentoj [1], ... ĝis la lastaj argumentoj [argumentoj.length-1].

Ŝanĝi la funkcion argumenton estas vere ene de la funkcio, sed ne ekstere. Por ŝanĝi ion ekstere de la funkcio, vi devas uzi la aktivan retomŝanĝilon, per kiu pasi la necesan valoron eksteren.

Post kiam la funkcio kompletigis, ĉio, kio estis asociita kun ĝia ekzekuto, estos detruita. Dum tempo de ekzekuto, la funkcio povas modifi eksterajn variablojn, krom tiuj priskribitaj en aliaj funkcioj, inkluzive de internaj.

Argumentoj havas stratan proprieton, kiu intencas nomi funkcion, kiu nun ekzekutas. Se vi nomas vin mem, tiam la funkcio de Javascript en la funkcio permesos al vi efektivigi rekursion.

Uzanta Funkciojn

La ĉefa maltrankvilo de la funkcioj estas servi la retumilajn eventojn. Por fari ĉi tion, en preskaŭ ĉiu etikedo, ĝi eblas specifi la nomon de la evento kaj la funkcio, kiu procesas ĝin. Vi povas specifi plurajn eventojn, sed nur unu funkcio estas specifita por ĉiu evento.

Unu funkcio povas servi multajn paĝajn elementojn kaj plurajn eventojn. Kun la "ĉi tiu" parametro, vi povas pasi informojn al la funkcio, de kie ĝi estis nomita.

La klasika uzo de JS-funkcioj estas eventaj manipuliloj pri elementoj. En ĉi tiu ekzemplo, la funkcio scfWecomeGo () aŭ scfWelcomeCancel () nomos en la enirejo / elirejo de la vizitanto, kaj kiam scfMenuItemAlklaku (ĉi tiu) estas elektita.

En ĉi-lasta kazo, la parametro "ĉi tiu" estas preterpasita, kiu permesas vin mirakle ekscii, kiun diva la voko devenis. Ĝenerale, Ĝavo estas tre bone enplantita en DOM kaj permesas ĝin navigi tra ĝiaj elementoj tiel facile, kolekti la necesan informon, ke la dinamiko de la paĝo povas esti simple impredecible.

La funkcio ne bezonas redoni ĉenon de signoj, nombro, aŭ alia funkcio. Ĝi povas redoni plenan HTML-elementon, kaj en kiu estos postulita nombro da elementoj, kun siaj propraj eventaj manipuliloj.

Metante tian elementon en la paĝo, la programisto kreas novan funkciojn, kio estas bona por solvi la problemon kaj kontentigi la interesojn de vizitantoj, sed ĝi estas sufiĉe malfacila koncerne la efektivigon.

Komencante tian plenan disvolviĝon, facile konfuziĝas en via propra kodo, en funkciaj alvokoj, en la momentoj, kiam ĉi tiu aŭ tiu enhavo de ĉi tiu aŭ tiu parto de la paĝo estas formita. Antaŭ preni tian direkton de evoluo, ĝi ne gravas pezi ĉion bone.

Pri distribuita pensado

La programisto devas pensi ĉe la nivelo de ĉiuj elementoj de la paĝo, ĉe la nivelo de ĉiuj eventoj kaj havi klaran ideon pri kiel vere estas. Ĝi estas komplika, sed ĉi tiu verko valoras ĝin.

En JavaScript, funkcio povas esti difinita al evento, kaj povas esti multaj tiaj funkcioj, kaj la eventoj havas la posedaĵon propagi kaj fali en la "medio" de la diversaj manipuladoj.

En ĉi tiu ekzemplo, ie pli frua, funkcio estis nomita, kiu komencis krei la dosieron-navigado-menuon. Oni supozas organizaĵon pri paĝado, tio estas, ekzistas nur sep dosieroj en la fenestro, kiuj povas esti forigitaj kaj procesitaj. Vi povas movi ambaŭ klakante sur la linio de la dosiero, kaj per sagoj sur la klavaro, kaj per blokoj de sep linioj.

En ĉiu kazo, estas funkcioj. Alivorte, en tia simpla ekzemplo, vi devas skribi kelkajn dekojn da funkcioj, kiuj respondos al malsamaj eventoj, kaj iuj el ĉi tiuj funkcioj manipulos malsamajn eblojn kaj situaciojn, kiuj tute ne aplikas al eventoj.

Ekzemple, se vi forigas linion, la fundaj linioj devus moviĝi. Por fari tion, vi ankaŭ bezonos fari novan selektadon, kiu estas banala kaj kapabla en rimedoj, aŭ rekalkuktu liniojn, uzu javaskriptajn tabelojn kaj elekte sukcesas la celon.

Argumentoj kaj funkciaj rezultoj

Javascript permesas al vi alporti la kodon al "plena-elstara" ŝtato. Kutime, kiam la argumento de funkcio estas funkcio. Eblo eblas kiam la funkcio redonas funkcion. Javasmo traktas tion tute trankvile.

Ĉi tio estas bona mekanismo, sed ĝi estas sufiĉe kompleksa koncerne al efektivigo. Teknike, ĉio estas permesebla, semantike provizas la logikon por la translokigo de "funkcia" nur per kvalifikita programisto.

Kiam funkcias Javaskripto en funkcio - kien ajn iris, sed kiam la funkcio generas funkcion, kaj tiu pli, tiam ĝi estas sufiĉe malfacile observi la logikon. Fakte, la demando ne estas ĉu apliki la kvalifikon, la demando estas akiri sekuran kaj ĝustan rezulton.

Careproduktanto estas klara kaj simpla. Ekzistas tasko, vi bezonas solvon, ne cimon kiel "JavaScript eraro, la operacio estas necerta", pura ekrano aŭ ĉesante la tutan retumilon.

Se la argumento estas funkcio, tiam la programisto pasas variablon kun specialaj propraĵoj, tio estas, ĝi ne estas nombro, ne ĉeno, ne objekto. Sed la uzo de tia argumento povas konduki al la fakto ke eksteraj variabloj ŝanĝos kaj la rezulto de la ekzekuto de la funkcio estos. Depende de kio okazos, ekzistos taŭgaj ŝanĝoj.

Ekzekuto de generita kodo

Efektivigu la ekzekuton de kodo generita dum la funkciado de alia kodo, vi povas uzi "eval". Ĉi tio ne estas bonega solvo, sed ofte ne eblas kompliki la kodon per redundaj funkcioj, sed por limigi vin al la malpura generacio de kodo de JavaScript kaj simple ekzekuti ĝin.

En ĉi tiu ekzemplo, enmeta linio estas enmetita en la agantajn divsojn de iu informo. La diva nombro kaj la enhavo de la informo estas malsamaj por malsamaj pozicioj, ĉar tia decido en ĉi tiu situacio ne garantias certigi la situacion "Javaskripta eraro, ke la operacio estas necerta", sed ĝi fidinde donos la deziritan efikon.

Nuance de la JavaScript paradigma "funkcio en funkcio"

Se ekzistas ebleco sen trooj, pli bone estas uzi ĝin. Ĉiuj listigitaj opcioj estas bonaj. Kompreneble, en multaj kazoj ĉi tiu estas la sola solvo.

Klasika ekzemplo de rekursio: faktoria kalkulo. Ĉi tie malfacilas sufiĉe skribi algoritmon, kiu estas batita, sed tre facile superas la limojn de signifo. La faktoro kreskas tro rapide.

Tamen, ambaŭ rekursio kaj funkcio, kiu vokas alian funkcion, kiu povas fari racia alvoko estas la normo de aferoj.

Ekzemple, regula tablo. Ekzistas aliaj tabloj en la tablo. Nestado ne povas esti limigita. Skribi por ĉiu tablo ĝia propra aro de funkcioj estas tro granda lukso.

Estas multaj ekzemploj, kaj ĉio ĉi estos realaj kaj urĝaj taskoj, tute ne de la kampo de programado. Tial la problemo estas precize, ke vi ne povas fari sen la trooj, la kreita sistemo de funkcioj, pli ĝuste ĝia debugado kaj posta fidinda laboro fariĝas maltrankvilo ne de JavaScript, sed de la programisto.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 eo.birmiss.com. Theme powered by WordPress.