je funkčně orientovaný jazyk, který uživateli poskytuje velkou svobodu. Funkci můžete vytvořit dynamicky, zkopírovat ji do jiné proměnné nebo předat jako argument jiné funkci a volat později z jiného místa. Uzávěry v JavaScriptu se vytvářejí pokaždé, když je vytvořena funkce, v době vytvoření funkce. V tomto článku pochopíme uzávěry v následujícím pořadí:
Jak převést dvojité na int
Úvod do uzávěrů v JavaScriptu
Uzávěr je kombinace a funkce svázaný s odkazy na jeho okolní stav, tj. lexikální prostředí. Jinými slovy, uzávěr vám poskytuje přístup z vnitřní funkce do rozsahu vnější funkce.
Většina vývojářů používá uzavření v JavaScriptu vědomě nebo nevědomě. Poskytuje lepší kontrolu nad kódem při jejich používání. Je to také nejčastěji kladená otázka během kteréhokoli .
Příklad:
funkce foo () {var x = 10 funkce vnitřní () {návrat x} návrat vnitřní} var get_func_inner = foo () console.log (get_func_inner ()) console.log (get_func_inner ()) console.log (get_func_inner ())
Výstup:
10
10
10
Zde máte přístup k proměnná x, který je definován ve funkci foo () prostřednictvím funkce inner (), protože později zachovává řetězec rozsahu uzavírací funkce v době provádění uzavírací funkce. Vnitřní funkce tedy zná hodnotu x prostřednictvím řetězce rozsahu. Takto můžete používat uzávěry v JavaScriptu.
Praktické uzávěry
Uzávěry vám umožňují přidružit lexikální prostředí k funkci, která na těchto datech pracuje. To má zjevné paralely objektově orientované programování , kde nám objekty umožňují přidružit vlastnosti objektu k jedné nebo více metodám.
V důsledku toho můžete použít uzávěr kdekoli, kde byste normálně mohli použít objekt pouze s jedinou metodou.
Příklad:
funkce makeSizer (size) {návratová funkce () {document.body.style.fontSize = size + 'px'}} var size12 = makeSizer (12) var size14 = makeSizer (14) var size16 = makeSizer (16)
Výše uvedený příklad je obecně připojen jako zpětné volání: jedna funkce, která je spuštěna v reakci na událost.
Řetěz rozsahu
Uzávěry v JavaScriptu mají tři obory, například:
- Místní rozsah
- Rozsah vnějších funkcí
- Globální rozsah
Běžnou chybou není uvědomění si, že v případě, že vnější funkce je sama o sobě vnořenou funkcí, přístup k rozsahu vnější funkce zahrnuje uzavírající rozsah vnější funkce, čímž se efektivně vytvoří řetězec rozsahů funkcí.
// globální rozsah var x = 10 funkce součet (a) {návratová funkce (b) {návratová funkce (c) {// vnější funkce návratová funkce (d) {// místní rozsah návrat a + b + c + d + x}}}} console.log (sum (1) (2) (3) (4)) // protokol 20
Lze jej také psát bez anonymních funkcí:
// globální rozsah var x = 10 funkce součet (a) {návratová funkce součet2 (b) {návratová funkce součet3 (c) {// vnější funkce rozsahu návratová funkce součet4 (d) {// místní rozsah vrácení a + b + c + d + x}}}} var s = součet (1) var s1 = s (2) var s2 = s1 (3) var s3 = s2 (4) console.log (s3) // log 20
Ve výše uvedeném příkladu existuje řada vnořených funkcí, z nichž všechny mají přístup k vnějšímu rozsahu funkce. Můžete tedy říci, že uzávěry mají přístup ke všem oborům vnějších funkcí, ve kterých byly deklarovány.
co je znak v Javě
Uzavření ve smyčce
Uzávěry v JavaScriptu můžete použít k uložení anonymní funkce při každém indexu pole . Uveďme si příklad a podívejme se, jak se uzávěry používají ve smyčce.
Příklad:
funkce vnější () {var arr = [] var i pro (i = 0 i<3 i++) { // storing anonymus function arr[i] = function () { return i } } // returning the array. return arr } var get_arr = outer() console.log(get_arr[0]()) console.log(get_arr[1]()) console.log(get_arr[2]())
Výstup:
3
3
3
3
Tím jsme se dostali na konec našeho článku. Doufám, že jste pochopili, jak uzávěry v JavaScriptu fungují a jak se používají k lepší kontrole kódu.
Nyní, když víte o Closures v JavaScriptu, podívejte se na podle Edureka. Osvědčení o školení pro vývoj webových aplikací vám pomůže Naučte se, jak vytvářet působivé webové stránky pomocí HTML5, CSS3, Twitter Bootstrap 3, jQuery a Google API a jak je nasadit do služby Amazon Simple Storage Service (S3).
Máte na nás dotaz? Uveďte to v sekci komentářů v části „Uzávěry v JavaScriptu“ a my se vám ozveme.