Uzamknout JavaScript: praktický příklad, funkce a pravidla

V obvodu programování nebo v anglické verzi „uzávěru“ - což je způsob, kterým se provádí místní název funkce závaznou v jazyce první třídy. Okamžitě představuje záznam, který ukládá funkci společně s prostředím. Prostředí je srovnání jednotlivých volné funkce s názvem hodnoty nebo referenční založena okruhu v javascriptu. Umožňuje přístup k zachyceným proměnným prostřednictvím kopií hodnot nebo odkazů, a to i při volání mimo oblast.

Koncepce obvody

[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_491. JPEG [/palec]
uzávěru byla vyvinuta v roce 1960 pro mechanické vyhodnocování výrazů použitých ve výpočtu, a v roce 1970 jako funkce programovacího jazyka PAL na podporu funkce první třídy lexikální rozsahu. Peter Landyn dal termín „uzavření“ v roce 1964, s prostředím a ovládací části na svém počítači, používanou k hodnocení SECD lambda výrazy související lexikální prostředí, které vedly k jejich uzavření nebo uzavření v JavaScriptu.


Toto vysvětlení přišel v roce 1975 jako omezené verze LISP jazykově a stal se rozšířený. Lexikální prostředí je množinou platných proměnných v programu. Skládá se z interního lexikálního prostředí a odkazů na vnější prostředí, tzv. Nelineárních proměnných. Lexikonové zámky v javascriptu jsou funkce s jeho externím prostředím. Stejně jako javascript, všechny proměnné mají odkaz na typ. JS používápouze vazba na odkaz -, který odpovídá C ++ 11 a životnost přeslechů lokální proměnné zachycené funkce se týká životnosti nástroje.
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_422.jpeg [/palec]

Funkce prvotřídní

Blokování v javascriptu se obvykle objevují v jazycích s prvotřídním významem. Tyto jazyky umožňují přenos funkcí jako argumentů. Kromě návratu z volání funkcí a vazby na jména proměnných. To se děje stejně jako jednoduché typy, například řádky a celá čísla.


[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_483 JPEG [/palec]
v tomto příkladu je výraz lambda (lambda (kniha) (větší nebo rovno (knižní prodejní kniha) prahová hodnota)) se zobrazí v nástroji nejprodávanějšího-knihy. V přepočtu lambda výraz vytváří schéma, které se skládá z kódu pro expresi lambda a odkaz na proměnné práh, který je volný proměnné uvnitř výrazu lambda. Uzávěr je pak přenášen funkci filtru, který opakovaně způsobuje, že určit, které knihy by měly být přidány do seznamu výsledků, které by měly být vyřazeny. Vzhledem k tomu, že hodnota prahu je uzamčena, může ji použít při každém volání filtru. Samotná funkce filtru může být definována v zcela samostatném souboru. Zde je tentýž příklad přepsaný v JS. Ukazuje, jak funguje zámek pod kapotou v jazyce javascript.
[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_624.jpeg [/palec]
Klíčové slovo se zde používá místo globální funkce filtrování, ale v jiné struktuře a účinku kódu existujestejné. Tato funkce může vytvořit okruh a vrátit ho, protože prochází v tomto případě funkce f proměnných dx, a dále fungovaly poté, co derivát, a to i v případě, že výkon je nechal ve svém rozsahu a jsou již viditelné.
V jazycích bez uzávěrů doživotní automatickou lokální proměnné rámu shoduje s provedením zásobníku, kde je proměnná deklarované. V jazycích Javascript obvodových funkcí a iife, proměnné by měly i nadále existovat tak dlouho, dokud existující zámku odkazem na ně. To je nejčastěji prováděno pomocí nějaké formy sběru odpadků.

Použití

[palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_525. JPEG [/palec]
výhodou tohoto obvodu je, že se udržuje rozsah „viditelnosti řetězce“ vnější nebo „rodič“ provedení kontextu. Toto chování může být použito několika způsoby a stalo se užitečným nástrojem k zabránění mnoha chyb javascript. Jedním z nejběžnějších je problém "smyček". Problém s cyklem nastává, když uživatel vytvoří cyklus a funkce očekává, že současná hodnota proměnné zůstává v této nové funkce, a to i v případě, že se změní v souvislosti s cykly před zavoláním nové funkce. Uzávěry se používají tak již žádné referenční transparentnost, a proto již čistý funkce, avšak jsou běžně používané v nečistých funkčních jazycích, jako jsou systém. Abychom pochopili, jaký typ uzavření javascriptu je třeba zvážit případypoužití Ve skutečnosti mají v praxi mnoho aplikací:
  • Mohou být použity k definování řídících struktur. Například všechny standardní řídící struktura Smalltalk, včetně poboček (v případě, /pak /jiného) a smyčky (a zároveň i pro), stanoveno pomocí objektů, metod, které jsou zajišťovací. Uživatelé mohou také snadno použít uzamčení k určení struktury řízení. V jazycích, které realizují cíle, může to vytvořit multi-funkční prostředí, které vám umožňují komunikovat s důvěrnými a změnit toto prostředí. Uzamčení se používá k implementaci objektových systémů.
  • Vytváření soukromých i veřejných metod proměnných pomocí šablon modulů. Kvůli tomuto návratu funkce dědí jsou všechny proměnné a argumenty v tomto kontextu k dispozici funkce nadřazené domény.
  • To je užitečné v situacích, kdy je funkce používá stejný zdroj pro každý hovor, ale vytváří zdroj pro něj. Tato okolnost činí tuto metodu neúčinnou, která je eliminována pouze uzavřením.
  • , fungující v JavaScriptu

    [palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost- ta-pravila_546.jpeg [/palec]
    Podle MDN (Mozilla Developer Center) «uzavírek - je funkcí nezávislé proměnné, které si“ pamatuje ‚prostředí svého vzniku.‘ A zpravidla, když funkce skončí, její místní proměnné již neexistují. Pochopení toho, jak funguje zámek v javascriptu, můžete zvážit několik mechanismů. První je formální logika. Například pomocí funkce logName, kterápřijme jedno jméno jako parametr a zaregistruje ho. Poté vytvořte smyčku, projít seznam jmen uvedených 1. čas, a pak zavolat LOGNAME, což je současný název. rysy jazyka
    prvotřídní lze manipulovat stejným způsobem jako jiné typy dat, jako například int nebo provázku. Pouze tento mechanismus umožňuje uživatelům vytvářet úžasné věci, například přiřadit funkci proměnné pro další volání nebo předat jako parametr funkce.
    [palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_177.jpeg [/palec]
    Tento princip se používá v mnoha agentur a zpracování událostí DOM. Za prvé, „naslouchat“ událost, pak přiřazení funkce zpětného volání, která bude volána pokaždé, když spuštění události.
    [palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_428.jpeg [/palec]

    Anonymní funkce

    [palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_469. JPEG [/palec]
    Anonymous funkce - funkce bez názvu. Téměř začínající programátoři se s nimi setkávají každý den, nevěděl hru s čísly. Například, provedení operace sčítání, může projít proměnných, jako jsou:

  • var x = 3;
  • y = 5;
  • , var z = x + y.
  • Nebo, pokud nemáte v úmyslu zpracovat čísla: var z = 3 + 5; Toto jsou anonymní čísla. Pro anonymní funkce je mohli oznámit, pokud jsou používány „on the fly“ - bez průchodu proměnnou. Například, co dělat s funkcí dříve: Do (funkce () {alert ("Ceci est une fonction anonyme.");}); Kromě toho existuje alternativní syntaxe reklamní funkcecož zdůrazňuje, že funkce mohou být současně anonymní a odkazují na jednoduché proměnné, což je pohodlný způsob, jak nastavit funkci zpětného volání.

    Definice funkcí

    Jedná se vlastně o stejný mechanismus, ale v tomto bodě, že bude vidět, jak se funkce obvodu uvnitř. Jak vidíte, protože funkce jsou proměnné, stejně jako jiné, neexistují žádné důvody, proč mohou být lokálně určeny. V jazyce nultého řádu, jako je C, C ++ a Java, všechny funkce jsou definovány na stejné úrovni viditelnosti, ve stejné třídě nebo na celém světě. Na druhou stranu, místní javascript funkce zmizí, stejně jako ostatní lokální proměnné, jakmile mateřská funkci končí, takže není vidět z jiných funkcí.
    [palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_6810.jpeg [/palec]
    Je to skutečně obtížné, ale javascript má způsob, jak sledovat viditelnost proměnných, a to i dvěma způsoby. Událost globální proměnné v JavaScriptu se stejným mechanismem jako v Javě - komplexní objekty, pole, DOM a jiné předměty předávány formou odkazu, jako v následujícím kódu: kartě var = [51, 42, 69]; může tab2 = záložka Kde se karta a tab2 - dva odkazy na stejnou tabulku technicky, tyto ukazatele jsou spravovány sběrem odpadků. Funkce jsou také odkazovány. Proměnná globalFn již není skrytá. Pořadí umožňuje toto provést, jak ukazuje příklad problému uzavření javascriptu.
    [palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_9511.jpeg [/palec]
    Zde je návod, jak získat funkci z lokálního kontextu, pokud funkce vyhovuje jiným místním proměnným. JednoduchéPříklad: auto-inkrementace, funkci, která vrací celé číslo, které zvyšuje o 1 pro každý hovor. Konkrétně je vyžadována funkce inc, která se chová takto: inc (); //retourne 0 inc (); //retourne 1 inc (); retourne 2 inc (); //retourne 3 //atd Se zámkem vypadá jako: funkce makeInc () {var x = 0; návratová funkce () {return x ++;}} var inc = makeInc (); Poslední řádek v době, kdy se zavádí proměnný funkci inc, nese některé proměnné, které jsou v okolí, v tomto případě, že X. Vytvoří neviditelný objekt kolem funkce, která obsahuje tuto proměnnou. Tento objekt je funkcí zavření javascriptu. Kromě toho, každá funkce kopírování bude mít obvod: var inc1 = makeInc (); var inc2 = makeInc (); inc1 (); //0 inc1 (); //1 inc1 (); //2 inc2 (); //0 inc1 (); //3 inc2 (); //1 inc2 (); //2 Jak vidíte, uzavření je v mnoha případech velmi užitečné.

    konflikty názvy proměnných

    , aby se zabránilo střetům názvy proměnných běžně používaných názvů. V javascriptu jmenný prostor představuje objekty podobné ostatním.
    [palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_5412.jpeg [/palec]
    Samozřejmě, A. x a B. x nejsou jedna a ta stejná proměnná. Ale chci spustit skript bez nutnosti zachování ostatních proměnných, pokud můžete použít anonymní funkci obvodu. To dává poněkud zvláštní syntaxi. Ačkoli dvě řádky kódu uprostřed jsou poměrně běžné, na druhé straně funkce, která je kolem, se provádí za běhu. Dbejte na kulaté závorky () na konci. A aby bylo možné vytvořit obvod, samotná anonymní funkce by měla být obklopena kulatými závorkami. Tato anonymní funkce používá lokální proměnnou, odstavec. To je všechnoSkvělý způsob, jak zabránit konfliktu jmen nebo nepříjemnosti, ale také proti útokům XSS, uživatelské proměnné jsou chráněny, nikdo je nemůže změnit, aby ovlivnil chování skriptu. Existuje varianta: (funkce () {//} ()); Zároveň věnujte pozornost permutaci závor. Rozdíl mezi těmito dvěma možnostmi je obtížné vysvětlit, protože se vztahují k čtení kódu lexikálním analyzátorem. V obou případech se funkce považuje za výraz, ale tento výraz není současně vyhodnocen. Nezapomeňte, že přijímá dvě dvojice kulatých závorek: jedna kolem funkce a jedna za ní.

    javascript programování v cyklech

    Když uživatel provádí velké svazky programování javascript, je pro něj těžké vyhnout se cyklům. Někdo to hodí bláznivě, po kterém se dostanou k myšlence, že každá implementace javascriptu má vážnou chybu. Pokud vývojář již má smyčku, kterou nechce převést, aby použil funkci iterátoru, potřebuje pouze zámek, ve kterém definuje nové proměnné. Opravují aktuální hodnotu proměnných a mění každou iteraci. Metoda pro zachycení proměnných spočívá v tom, že externí obvod je okamžitě proveden během aktuální iterace cyklu. Lze použít jeden z těchto dvou modelových přístupů
    [palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_7913. jpeg [/thumb]
    Nyní existuje další zjednodušené řešení tohoto problému, protože klíčové slovo let je podporováno jak v prohlížeči Firefox, tak i v prohlížeči Chrome. Je to klíčové slovo pro variabilní blok var. Nechte pracovat kouzelně, protože to je oznámenonová proměnná j, jejíž hodnota je fixována uzavřením v rámci cyklu. Je však třeba mít na paměti, že po skončení jedné iterace cyklu nadále neexistuje, protože je lokální.

    Slučka a funkce

    Pro smyčku v javascriptu se nezobrazuje, stejně jako smyčka pro C nebo Java. Ve skutečnosti vypadá spíše jako PHP. Nejdůležitější poznatky o cyklech v JS spočívají v tom, že nevytvářejí oblast působení. JS nemá blok rozsahu, pouze funkci hlasitosti. Tuto vlastnost lze vzít v úvahu na následujícím fragmentu: function foo () {var bar = 1; pro (var i = 0; i. zámky a agregace okruh - to nic, jako funkce uvnitř jiných funkcí, a přenášeny v jiném kontextu Nazývají se uzávěr, jak se uzavře, protože lokální proměnné, které jsou do jiných oblastí funkce k dispozici , například čas, x je definován jako parametru foo, a var bar = foo

    () vrací 84. vrátí foo k x. to je důležité, protože to pomáhá vývojářům vytvářet funkce v cyklech závisle proměnná cyklu. Vezměme tento fragment, který přiděluje obsluze pro kliknutí různým prvkům: //elements je a 3 rray z prvků DOM var hodnoty = ['foo', 'bar', 'baz'], nebo (var i = 0 l = elements.length; i Případová studie JavaScript obvod v obvodu v případě, že uživatel je přímo nad source prohlížeče, ., že může čelit problému, jak to může dělat žádné chyby syntaxe Pokud se spustí kód přímo v prohlížeči, šance jsou velmi vysoké, nikoli kompilovat procesu kompilace WebPack Možná řešení:. //main.js funkci práce (jméno) { návratová funkce (téma) {console.log (co je $ {topic} ve $ {name}); }} práce ('javascript') ('Closure'); Nejprve je funkce nazývána anázev argumentu je předán. Nyní tato slovní zásobní funkce také vrací funkci, která také přijímá argument daného tématu. Tato funkce registruje výstup a výstup má přístup k proměnné. Oblast funkce Insider není omezena na tuto funkci, takže koncept se nazývá Closure, protože má přístup k tomuto poli externího parametru. Funkce návratu má přístup k externí lexikální oblasti nebo kontextu. Když vývojář vyvolá funkci, která ji také vrátí, původní proměnné jsou vždy k dispozici pro interní funkci. Následuje příklad s následujícím kódem.
    [palec] http://hi-news.pp.ua/uploads/posts/2018-11/zamikannya-v-javascript-praktichniy-priklad-osoblivost-ta-pravila_5314.jpeg [/palec]

    Příklad interní funkce

    Další podrobnosti o uzavření javascriptu lze popsat ve druhém příkladu. Nyní je toto prostředí pro zpracování zničeno, ale název parametru stále existuje. Vytvoří se nové interní funkční prostředí, které je anonymní funkcí. Má přístup do oblasti externího lexikálního prostředí. Proto přetrvává proměnná prostředí, takže anonymní funkce má přístup k proměnné name v konzole, například "Co je zámek v javascribu". Interní anonymní funkce //main.js function factory () {var products = []; for (var i = 0;. i. Vytvoření funkce "on the fly" může vytvořit tovární funkce - functionFactory, který vykonává své vlastní problémy výsledná funkce of bude fungovat uzavření rostlina, která si pamatuje prostředí tvorba var functionFactory = function (num1) {return Funkce (num2) {return num1 * num2;}} Tato funkce umožňuje přenést jedno číslo functionFactory, poté functionFactory vrátí zámek,hodnota paměti num1. Výsledná funkce vynásobí počáteční počet čísel číselných čísel 1, která byla předána při volání. může být mult5 = functionFactory
    ; může být mult10 = functionFactory
    ; Výše uvedené funkce jednoduše vytváří funkce mult5 a mult10. Nyní můžete odkazovat na některou z těchto funkcí předáním nového čísla, které chcete vynásobit číslem 5 nebo 10. Nyní můžete vidět výsledek. & gt; mult5
    15> mult5
    25> mult10
    30> mult10
    50 Lock je jedna z nejsilnějších funkcí javascriptu, ale nemůže být použita správně bez pochopení podstaty. Jsou poměrně snadno vytvářet náhodou, to je důvod, proč se nebezpečné uzavření javascriptu. Jejich vytvoření má potenciálně škodlivé účinky, zejména v některých běžných prostředích webového prohlížeče. Aby se zabránilo náhodným kolizím s nevýhodami a aby se využily výhod, které nabízejí, je třeba pochopit jejich mechanismus.

    Související publikace