V obvode programovania alebo v anglickej verzii "uzáveru" - čo je spôsob, ktorým sa vykonáva miestny názov funkcie záväznou v jazyku prvej triedy. Okamžite predstavuje záznam, ktorý ukladá funkciu spolu s prostredím. Prostredie je porovnanie každej voľnej funkcie s hodnotou alebo odkazom názvu vytvoreného zatvorením v javascripte. Umožňuje prístup k zachyteným premenným prostredníctvom kópií hodnôt alebo odkazov, dokonca aj keď je volaný mimo oblasti.
Koncepcia obvody
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_491. JPEG [/palec]
uzáveru bola vyvinutá v roku 1960 pre mechanické vyhodnocovanie výrazov použitých vo výpočte, a v roku 1970 ako funkcia programovacieho jazyka PAL na podporu funkcie prvej triedy lexikálne rozsahu. Peter Landyn dal termín "uzavretie" v roku 1964, s prostredím a ovládacie časti na svojom počítači, používanú na hodnotenie SECD lambda výrazy súvisiace lexikálne prostredie, ktoré viedli k ich uzatvorenie alebo uzatvorenie v JavaScripte.Toto vysvetlenie prišiel v roku 1975 ako obmedzené verzie LISP jazykovo a stal sa rozšírený. Lexikálne prostredie je súbor platných premenných v programe. Má vnútorné lexikálne prostredia a odkazuje na životné prostredie, tzv non-lokálne premenné. Lexikónové zámky v jazyku javascript sú funkcie s vonkajším prostredím. Rovnako ako javascript, všetky premenné majú odkaz na typ. JS používaiba odkazovanie - čo zodpovedá C ++ 11, a životnosť premenných lokálnych znakov zachytávaných funkciou sa rozširuje počas celej životnosti funkcie.
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_422.jpeg [/palec]
Funkcie najvyššej kvality
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_483 JPEG [/palec]
v tomto príklade je výraz lambda (lambda (kniha) (väčšie alebo rovné (knižné predajné kniha) prahová hodnota)) sa zobrazí v nástroji najpredávanejšieho-knihy. V prepočte lambda výraz vytvára schému, ktoré sa skladá z kódu pre expresiu lambda a odkaz na premenné prah, ktorý je voľný premenné vnútri výrazu lambda. Zámok potom prechádza filtračnou funkciou, ktorá ju vyvoláva opakovane, aby určila, ktoré knihy by sa mali pridať do zoznamu výsledkov a ktoré by sa mali zlikvidovať. Keďže hodnota prahu je uzamknutá, môže ju použiť pri každom vyvolaní jeho filtra. Vlastná filtračná funkcia môže byť definovaná v úplne samostatnom súbore. Tu je ten istý príklad, prepísaný v JS. Ukazuje, ako funguje zámok pod kapotou v jazyku javascript.[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_624.jpeg [/palec]
Kľúčové slovo sa tu používa namiesto funkcie globálneho filtra, ale v inej štruktúre a vplyve kódu existujeto isté. Táto funkcia môže vytvoriť okruh a vrátiť ho, pretože prechádza v tomto prípade funkcia f premenných dx, a ďalej fungovali potom, čo derivát, a to aj v prípade, že výkon je nechal vo svojom rozsahu a sú už viditeľné.V jazykoch bez zámkov sa životnosť automatickej lokálnej premennej zhoduje s vykonaním rámca zásobníka, kde je táto premenná deklarovaná. V jazykoch s uzávermi typu javascript a funkciami funkcie prežitia musí premenné naďalej existovať tak dlho, kým existujúce prepojenia s nimi existujú. To je najčastejšie realizované pomocou nejakej formy zberu odpadu.
Použitie
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_525. JPEG [/palec]
výhodou tohto obvodu je, že sa udržuje rozsah "viditeľnosti reťazca" vonkajšie alebo "rodič" prevedení kontextu. Toto správanie sa môže použiť niekoľkými spôsobmi a stalo sa užitočným nástrojom na zabránenie viacerým chybám jazyka JavaScript. Jedným z najbežnejších je problém "slučiek". Problém s cyklom nastáva, keď používateľ vytvorí cyklus a funkcie očakáva, že súčasná hodnota premennej zostáva v tejto novej funkcie, a to aj v prípade, že sa zmení v súvislosti s cyklami pred zavolaním nové funkcie. Uzávery sa používajú tak už žiadne referenčné transparentnosť, a preto už čistý funkcie, avšak sú bežne používané v nečistých funkčných jazykoch, ako sú systém. Aby sme pochopili, aký typ uzávierky v javascripte je potrebné zvážiť ich prípadypoužiť. V skutočnosti majú v praxi mnoho aplikácií:, fungujúci v JavaScripte
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost- ta-pravila_546.jpeg [/palec]
Podľa MDN (Mozilla Developer Center) «uzávierok - je funkciou nezávislej premennej, ktoré si" pamätá, prostredie svojho vzniku. ' A pravidlo, keď končí funkcia, už neexistujú miestne premenné. Pochopenie toho, ako funguje zámok v jazyku javascript, môžete zvážiť niekoľko mechanizmov. Prvá je formálna logika. Napríklad pomocou funkcie logName, ktoráprijíma jedno meno ako parameter a zaregistruje ho. Potom vytvorím slučku na vytvorenie zoznamu mien, nastavenie prvého časového limitu a potom volanie funkcie logName do aktuálneho názvu.V jazyku prvej triedy môže byť funkcia manipulovaná rovnakým spôsobom ako iné typy údajov, ako napríklad int alebo reťazec. Iba tento mechanizmus umožňuje užívateľom vytvárať úžasné veci, napríklad priradiť funkciu premenné pre ďalšie volanie alebo odovzdať ako parameter funkcie.
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_177.jpeg [/palec]
Tento princíp používajú mnohé subjekty, ako aj spracovatelia udalostí DOM. Spočiatku počúvajte udalosť a potom priraďte funkciu spätného volania, ktorá sa vyvolá pri každom spustení udalosti.[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_428.jpeg [/palec]
Anonymné funkcie
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_469. jpeg [/thumb]
Anonymná funkcia je funkcia bez názvu. Takmer noví programátori sa s nimi stretávajú každý deň bez toho, aby pochopili hru s číslami. Napríklad, vykonanie operácie sčítania, môže prejsť premenných, ako sú:Definícia funkcií
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_6810.jpeg [/palec]
to je naozaj ťažké, ale javascript je spôsob, ako sledovať viditeľnosť premenných, a to aj v dvoch smeroch. Udalosť globálne premenné v JavaScripte s rovnakým mechanizmom ako v Jave - komplexné objekty, polia, DOM a iné predmety odovzdávané formou odkazu, ako v nasledujúcom kóde: karte var = [51, 42, 69]; var Tab2 = tab. Pokiaľ karta a Tab2 - dva odkazy na rovnakých ukazovateľov tabuľky technicky riadený garbage collector. Funkcie sú tiež prenášané cez prepojenie. Variabilné globalFn už nie sú skryté. Tento postup umožňuje, aby robiť, že preukazuje problému na okruhu javascriptu.[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_9511.jpeg [/palec]
tu je návod, ako sa dostať na funkciu v miestnom kontexte, ak je funkcia spĺňa ďalšie lokálne premenné. jednoduchýpríklad: automatický prírastok, funkcia, ktorá vracia celé číslo, ktoré sa zvyšuje o 1 za každý hovor. Konkrétne je potrebná funkcia inc, ktorá sa správa takto: inc (); retourne 0 inc (); //retourne 1 inc (); //retourne 2 inc (); //retourne 3 //atď Pri zámku vyzerá takto: funkcia makeInc () {var x = 0; návratová funkcia () {return x ++;} var inc = makeInc (); Posledný riadok v čase, keď sa zavádza premenný funkciu inc, nesie niektoré premenné, ktoré sú v okolí, v tomto prípade, že X. Vytvára neviditeľný objekt okolo funkcie, ktorá obsahuje túto premennú. Tento objekt je funkciou zatvorenia javascriptu. V tomto prípade má každá kópia funkcie vlastný uzáver: var inc1 = makeInc (); var in2 = makeInc (); inc1 (); //0 inc1 (); //1 inc1 (); //2 inc2 (); //0 inc1 (); //3 inc2 (); //1 inc2 (); //2 Ako vidíte, zatváranie je v mnohých prípadoch veľmi užitočné.konflikty názvy premenných
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_5412.jpeg [/palec]
Prirodzene, A. x a B. x nie sú jedna a tá istá premenná. Ale chcem spustiť skript bez nutnosti zachovania ostatných premenných, ak môžete použiť anonymný funkciu obvodu. To dáva trochu zvláštnu syntax. Aj keď dva riadky kódu v stredu skôr obyčajný na druhej strane, funkcia, ktorá sa pohybuje okolo, hral "za pochodu". Venujte pozornosť okrúhlym zátvorkám () na konci. A aby sa mohol vytvoriť okruh, samotná anonymná funkcia by mala byť obklopená okrúhlymi zátvorkami. Táto anonymná funkcia používa lokálnu premennú, odsek. To je všetkoSkvelý spôsob, ako zabrániť konfliktom názvov alebo nepríjemnosti, ale aj proti útokom XSS, používateľské premenné sú chránené, nikto ich nemôže zmeniť, aby ovplyvnili správanie skriptu. Existuje variant: () () {//} ()); Zároveň dávajte pozor na permutáciu zátvoriek. Rozdiel medzi týmito dvoma možnosťami je ťažké vysvetliť, pretože súvisia s tým, ako sa kód číta lexikálnym analyzátorom. V oboch prípadoch sa táto funkcia považuje za výraz, ale tento výraz sa nehodnotí súčasne. Nezabudnite, že prijíma dve páry okrúhlych zátvoriek: jednu okolo funkcie a jednu za ňou.javascript programovanie v cykloch
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_7913. jpeg [/thumb]
Teraz existuje ďalšie zjednodušené riešenie tohto problému, pretože kľúčové slovo let je podporované v prehliadači Firefox aj v prehliadači Chrome. Je to kľúčové slovo pre variabilný blok var. Nechajte pracovať kúzlo, pretože je to oznámenénová premenná j, ktorej hodnota je fixovaná uzáverom v rámci cyklu. Musíme však mať na pamäti, že to nebude existovať aj naďalej po skončení jedného opakovania slučky, pretože to lokálne. , a slučky funkcie
() vracia 84. vráti foo k x. to je dôležité, pretože to pomáha vývojárom vytvárať funkcie v cykloch závisle premenná cyklu. Zoberme tento úryvok, ktorý priradí obslužnému prvku kliknutí rôznym prvkom: //elements je a 3 rray z prvkov DOM var hodnoty = ['foo', 'bar', 'baz'], alebo (var i = 0 l = elements.length; aj Prípadová štúdia JavaScript obvod v obvode v prípade, že používateľ je priamo nad source prehliadača, ., že môže čeliť problému, ako to môže robiť žiadne chyby syntaxe Ak sa spustí kód priamo v prehliadači, šance sú veľmi vysoké, nie kompilovať procesu kompilácie WebPack Možné riešenia :. //main.js funkciu práce (meno) { návratová funkcia (téma) {console.log (čo je $ {topic} v $ {name}); }} práca ('javascript') ('Closure'); Po prvé, funkcia sa nazýva anázov argumentu je úspešný. Teraz táto funkcia slovníka vráti aj funkciu, ktorá tiež akceptuje argument tejto témy. Táto funkcia registruje výstup a výstup má prístup k premennej. Táto oblasť ponúka Insider sa neobmedzuje iba na túto funkciu, pretože koncept sa nazýva uzavretie, pretože má prístup do tejto oblasti vonkajšieho parametra. Spätná funkcia má prístup k externej lexikálnej oblasti alebo kontextu. Ak je developer zavolá funkciu, ktorý tiež vráti ho, spočiatku volal variabilný funkcie sú vždy k dispozícii pre interné funkcie. Nasleduje príklad s nasledujúcim kódom.[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_5314.jpeg [/palec]
príkladom vnútorných funkcií
; môže mult10 = functionFactory
; Vyššie uvedené jednoducho vytvára funkcie mult5 a mult10. Teraz môžete odkázať na niektorú z týchto funkcií zadaním nového čísla, ktoré chcete vynásobiť číslom 5 alebo 10. Teraz môžete vidieť výsledok. & gt; viac5
15> viac
25> viac
25> viac
30> mult10
50 Lock je jedna z najsilnejších funkcií javascriptu, ale nemôže byť použitá správne bez pochopenia podstaty. Relatívne ľahko sa vytvárajú náhodne, preto sa nebezpečný uzáver javascriptu uzatvára. Ich vytváranie má potenciálne škodlivé účinky, najmä v niektorých bežných prostrediach webového prehliadača. Aby sa zabránilo náhodným kolíziám s nevýhodami a aby sa využili výhody, ktoré ponúkajú, je potrebné porozumieť ich mechanizmu.
50 Lock je jedna z najsilnejších funkcií javascriptu, ale nemôže byť použitá správne bez pochopenia podstaty. Relatívne ľahko sa vytvárajú náhodne, preto sa nebezpečný uzáver javascriptu uzatvára. Ich vytváranie má potenciálne škodlivé účinky, najmä v niektorých bežných prostrediach webového prehliadača. Aby sa zabránilo náhodným kolíziám s nevýhodami a aby sa využili výhody, ktoré ponúkajú, je potrebné porozumieť ich mechanizmu.