Tässä opetusohjelmassa opit JavaScript-sulkemisista esimerkkien avulla.
Ennen kuin opit sulkemisista, sinun on ymmärrettävä kaksi käsitettä:
- Sisäkkäinen toiminto
- Palautetaan funktio
JavaScriptin sisäkkäinen toiminto
JavaScriptissä funktio voi sisältää myös toisen toiminnon. Tätä kutsutaan sisäkkäiseksi funktioksi. Esimerkiksi,
// 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
Yllä olevassa ohjelmassa greet()
toiminto sisältää displayName()
toiminnon sen sisällä.
Funktion palauttaminen
JavaScriptissä voit myös palauttaa funktion funktion sisällä. Esimerkiksi,
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
Tuotos
function displayName () (konsoli.log ('Hei' + '' + nimi);) Hei John
Yllä olevassa ohjelmassa greet()
funktio palauttaa displayName
funktion määritelmän.
Tässä palautettu funktion määritelmä määritetään muuttujalle g1. Kun tulostat g1: n käyttämällä console.log(g1)
, saat funktion määritelmän.
G1-muuttujaan tallennetun funktion kutsumiseksi käytämme g1()
sulkeissa.
JavaScript-sulkimet
JavaScriptissä sulkeminen tarjoaa pääsyn toiminnon ulottuvuuteen sisäfunktion sisäpuolelta, vaikka ulompi toiminto olisi suljettu. Esimerkiksi,
// 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
Tuotos
function displayName () (// nimimuuttujan käyttäminen palauttaa 'Hi' + '' + nimi;) Hei John
Yllä olevassa esimerkissä, kun greet()
funktiota kutsutaan, se palauttaa funktion määritelmän displayName
.
Tässä g1
on viittaus displayName()
funktioon.
Kun g1()
kutsutaan, sillä on edelleen pääsy greet()
toimintoon.
Kun suoritamme console.log(g1)
, se palauttaa funktion määritelmän.
Sulkemisen käsite on olemassa muille ohjelmointikielille, kuten Python, Swift, Ruby jne.
Katsotaanpa toinen esimerkki.
// 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
Yllä olevassa ohjelmassa calculate()
funktio ottaa yhden argumentin x
ja palauttaa funktion funktion määritelmän multiply()
. multiply()
Funktio ottaa yhden argumentin y
ja palauttaa x * y
.
Sekä multiply3
ja multiply4
ovat lopettaneet.
calculate()
Toimintoa kutsutaan kulkee parametri x
. Kun multiply3
ja multiply4
kutsutaan, multipy()
funktiolla on pääsy ulomman calculate()
funktion x-argumenttiin .
Tietosuoja
JavaScriptin sulkeminen auttaa ohjelman tietosuojaa. Esimerkiksi,
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
Yllä olevassa esimerkissä sum()
funktio palauttaa funktion funktion määritelmän increaseSum()
.
Muuttujaa lisätään increaseSum()
funktion sisällä . Muuttujan arvoa voidaan kuitenkin muuttaa myös funktion ulkopuolella. Tässä tapauksessa a = a + 1;
muuttaa muuttujan arvoa funktion ulkopuolella.
Nyt, jos haluat muuttujan lisäämisen vain toiminnon sisällä, voit käyttää sulkua. Esimerkiksi,
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
Yllä olevassa esimerkissä sum()
funktio asettaa arvon a arvoksi 0 ja palauttaa increaseSum()
funktion.
Sulkemisen vuoksi, vaikka sum()
on jo toteutettu, increaseSum()
on edelleen pääsy ja voi lisätä 1 on aina x()
kutsutaan.
Ja muuttuja on sum()
funktiolle yksityinen . Se tarkoittaa, että muuttujaan pääsee vain sum()
funktion sisällä .
Vaikka ilmoitat a
ja käytät sitä, se ei vaikuta funktion a
sisällä olevaan muuttujaan sum()
.
Huomaa : Yleensä sulkemisia käytetään tietosuojaan.