Închideri JavaScript

În acest tutorial, veți afla despre închiderile JavaScript cu ajutorul exemplelor.

Înainte de a afla despre închideri, trebuie să înțelegeți două concepte:

  • Funcția imbricată
  • Revenirea unei funcții

Funcția imbricată JavaScript

În JavaScript, o funcție poate conține și o altă funcție. Aceasta se numește funcție imbricată. De exemplu,

 // 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

În programul de mai sus, greet()funcția conține displayName()funcția din interiorul acestuia.

Revenirea unei funcții

În JavaScript, puteți returna și o funcție în cadrul unei funcții. De exemplu,

 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

Ieșire

 funcție displayName () (console.log ('Bună' + '' + nume);) Bună John

În programul de mai sus, greet()funcția returnează displayNamedefiniția funcției.

Aici, definiția funcției returnate este atribuită variabilei g1. Când tipăriți g1 folosind console.log(g1), veți obține definiția funcției.

Pentru a apela funcția stocată în variabila g1, folosim g1()cu paranteze.

Închideri JavaScript

În JavaScript, închiderea oferă acces la sfera exterioară a unei funcții din interiorul funcției interioare, chiar și după închiderea funcției externe. De exemplu,

 // 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

Ieșire

 funcție displayName () (// accesând variabila nume returnează „Bună” + ”+ nume;) Bună Ioan

În exemplul de mai sus, când greet()funcția este apelată, returnează definiția funcției de displayName.

Iată g1o referință la displayName()funcție.

Când g1()este apelat, acesta are încă acces la greet()funcție.

Când rulăm console.log(g1), returnează definiția funcției.

Conceptul de închidere există pentru alte limbaje de programare precum Python, Swift, Ruby etc.

Să aruncăm o privire la un alt exemplu.

 // 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

În programul de mai sus, calculate()funcția ia un singur argument xși returnează definiția multiply()funcției funcției. multiply()Functia ia un singur argument yși se întoarce x * y.

Ambele multiply3și multiply4sunt închideri.

calculate()Funcția se numește trece un parametru x. Când multiply3și multiply4sunt apelate, multipy()funcția are acces la argumentul x trecut al calculate()funcției externe .

Confidențialitatea datelor

Închiderea JavaScript ajută la confidențialitatea datelor din program. De exemplu,

 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

În exemplul de mai sus, sum()funcția returnează definiția increaseSum()funcției funcției.

Variabila a este mărită în interiorul increaseSum()funcției. Cu toate acestea, valoarea variabilei a poate fi modificată și în afara funcției. În acest caz, a = a + 1;modifică valoarea variabilei în afara funcției.

Acum, dacă doriți ca variabila a să fie mărită numai în interiorul funcției, puteți utiliza o închidere. De exemplu,

 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

În exemplul de mai sus, sum()funcția setează valoarea lui a la 0 și returnează increaseSum()funcția.

Din cauza închiderii, chiar dacă sum()este deja executată, increaseSum()are încă acces la un și poate adăuga 1 la un de fiecare dată când x()este apelat.

Și variabila a este privată pentru sum()funcție. Înseamnă că variabila a poate fi accesată numai în interiorul sum()funcției.

Chiar dacă îl declarați ași îl utilizați, acesta nu afectează avariabila din interiorul sum()funcției.

Notă : În general, închiderile sunt utilizate pentru confidențialitatea datelor.

Articole interesante...