V tomto kurzu se na příkladech dozvíte o uzavření JavaScriptu.
Než se dozvíte o uzávěrách, musíte porozumět dvěma konceptům:
- Vnořená funkce
- Vrácení funkce
Funkce vnořeného JavaScriptu
V JavaScriptu může funkce obsahovat i jinou funkci. Tomu se říká vnořená funkce. Například,
// nested function example // outer function function greet(name) ( // inner function function displayName() ( console.log('Hi' + ' ' + name); ) // calling inner function displayName(); ) // calling outer function greet('John'); // Hi John
Ve výše uvedeném programu greet()
obsahuje displayName()
funkce funkci uvnitř.
Vrácení funkce
V JavaScriptu můžete také vrátit funkci v rámci funkce. Například,
function greet(name) ( function displayName() ( console.log('Hi' + ' ' + name); ) // returning a function return displayName; ) const g1 = greet('John'); console.log(g1); // returns the function definition g1(); // calling the function
Výstup
funkce displayName () (console.log ('Hi' + '' + name);) Ahoj Johne
Ve výše uvedeném programu greet()
funkce vrací displayName
definici funkce.
Zde je vrácená definice funkce přiřazena proměnné g1. Při tisku g1 pomocí console.log(g1)
získáte definici funkce.
K volání funkce uložené v proměnné g1 použijeme g1()
závorky.
Uzávěry JavaScriptu
V JavaScriptu uzavření poskytuje přístup k vnějšímu rozsahu funkce zevnitř vnitřní funkce, a to i poté, co byla vnější funkce uzavřena. Například,
// javascript closure example // outer function function greet() ( // variable defined outside the inner function let name = 'John'; // inner function function displayName() ( // accessing name variable return 'Hi' + ' ' + name; ) return displayName; ) const g1 = greet(); console.log(g1); // returns the function definition console.log(g1()); // returns the value
Výstup
funkce displayName () (// přístup k proměnné názvu return 'Hi' + '' + name;) Ahoj Johne
Ve výše uvedeném příkladu při greet()
volání funkce vrátí definici funkce displayName
.
Zde g1
je odkaz na displayName()
funkci.
Při g1()
volání má stále přístup k greet()
funkci.
Když spustíme console.log(g1)
, vrátí definici funkce.
Koncept uzavření existuje pro jiné programovací jazyky, jako jsou Python, Swift, Ruby atd.
Podívejme se na další příklad.
// closure example function calculate(x) ( function multiply(y) ( return x * y; ) return multiply; ) const multiply3 = calculate(3); const multiply4 = calculate(4); console.log(multiply3); // returns calculate function definition console.log(multiply3()); // NaN console.log(multiply3(6)); // 18 console.log(multiply4(2)); // 8
Ve výše uvedeném programu calculate()
funkce přebírá jeden argument x
a vrací definici multiply()
funkce funkce. multiply()
Funkce má jeden argument y
a vrací se x * y
.
Oba multiply3
a multiply4
jsou uzávěry.
calculate()
Funkce se nazývá předání parametru x
. Když multiply3
a multiply4
jsou volány, multipy()
funkce má přístup k předanému x argumentu vnější calculate()
funkce.
Ochrana osobních údajů
Uzavření JavaScriptu pomáhá při ochraně osobních údajů programu. Například,
let a = 0; function sum() ( function increaseSum() ( // the value of a is increased by 1 return a = a + 1; ) return increaseSum; ) const x = sum(); console.log(x()); // 1 console.log(x()); // 2 console.log(x()); // 3 a = a + 1; console.log(a); // 4
Ve výše uvedeném příkladu sum()
funkce vrací definici increaseSum()
funkce funkce.
Proměnná je uvnitř increaseSum()
funkce zvětšena . Hodnotu proměnné však lze změnit i mimo funkci. V tomto případě a = a + 1;
změní hodnotu proměnné mimo funkci.
Nyní, pokud chcete, aby se proměnná zvýšila pouze uvnitř funkce, můžete použít uzávěr. Například,
function sum() ( let a = 0; function increaseSum() ( // the value of a is increased by 1 return a = a + 1; ) return increaseSum; ) let x = sum(); let a = 5; console.log(x()); // 1 console.log(x()); // 2 console.log(a); // 5
Ve výše uvedeném příkladu sum()
funkce nastaví hodnotu a na 0 a vrátí increaseSum()
funkci.
Z důvodu uzavření, i když sum()
je již provedeno, increaseSum()
má stále přístup k a může při každém volání přidat 1 do a x()
.
A proměnná je pro sum()
funkci soukromá . To znamená, že k proměnné lze přistupovat pouze uvnitř sum()
funkce.
I když jej deklarujete a
a použijete, neovlivní to a
proměnnou uvnitř sum()
funkce.
Poznámka : Uzávěry se obecně používají k ochraně osobních údajů.