JavaScript-sulkimet

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 displayNamefunktion 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ä g1on 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 xja palauttaa funktion funktion määritelmän multiply(). multiply()Funktio ottaa yhden argumentin yja palauttaa x * y.

Sekä multiply3ja multiply4ovat lopettaneet.

calculate()Toimintoa kutsutaan kulkee parametri x. Kun multiply3ja multiply4kutsutaan, 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 aja käytät sitä, se ei vaikuta funktion asisällä olevaan muuttujaan sum().

Huomaa : Yleensä sulkemisia käytetään tietosuojaan.

Mielenkiintoisia artikkeleita...