JavaScript-lukninger

I denne vejledning lærer du om JavaScript-lukninger ved hjælp af eksempler.

Før du lærer om lukninger, skal du forstå to begreber:

  • Indlejret funktion
  • Returnering af en funktion

JavaScript nestet funktion

I JavaScript kan en funktion også indeholde en anden funktion. Dette kaldes en indlejret funktion. For eksempel,

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

I ovenstående program greet()indeholder displayName()funktionen funktionen inde i den.

Returnering af en funktion

I JavaScript kan du også returnere en funktion inden for en funktion. For eksempel,

 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

Produktion

 funktion displaynavn () (console.log ('Hej' + '' + navn);) Hej John

I ovenstående program greet()returnerer displayNamefunktionen funktionsdefinitionen.

Her tildeles den returnerede funktionsdefinition til g1-variablen. Når du udskriver g1 ved hjælp af console.log(g1), får du funktionsdefinitionen.

For at kalde den funktion, der er gemt i g1-variablen, bruger vi g1()med parenteser.

JavaScript-lukninger

I JavaScript giver lukning adgang til det ydre omfang af en funktion inde fra den indre funktion, selv efter at den ydre funktion er lukket. For eksempel,

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

Produktion

 funktion displaynavn () (// adgang til navnevariabel returnerer 'Hej' + '' + navn;) Hej John

I ovenstående eksempel, når greet()funktion kaldes, returnerer den funktionsdefinitionen af displayName.

Her g1er en henvisning til displayName()funktionen.

Når g1()der kaldes, har den stadig adgang til greet()funktionen.

Når vi kører console.log(g1), returnerer den funktionsdefinitionen.

Begrebet lukning findes for andre programmeringssprog som Python, Swift, Ruby osv.

Lad os se på et andet eksempel.

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

I ovenstående program calculate()tager funktionen et enkelt argument xog returnerer funktionsdefinitionen af multiply()funktionen. Den multiply()funktion tager et enkelt argument yog returnerer x * y.

Begge multiply3og multiply4er lukninger.

Den calculate()funktion kaldes passerer en parameter x. Når multiply3og multiply4kaldes, har multipy()funktionen adgang til det passerede x-argument for den ydre calculate()funktion.

Databeskyttelse

JavaScript-lukning hjælper med databeskyttelse af programmet. For eksempel,

 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

I ovenstående eksempel sum()returnerer funktionen funktionsdefinitionen af increaseSum()funktionen.

Variablen a øges inde i increaseSum()funktionen. Værdien af ​​en variabel kan dog også ændres uden for funktionen. I dette tilfælde a = a + 1;ændres værdien af ​​variablen uden for funktionen.

Nu, hvis du kun vil øge en variabel inde i funktionen, kan du bruge en lukning. For eksempel,

 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

I ovenstående eksempel indstiller sum()funktionen værdien a til 0 og returnerer increaseSum()funktionen.

På grund af lukningen, selvom den sum()allerede er udført, har den increaseSum()stadig adgang til a og kan tilføje 1 til en hver gang x()der kaldes.

Og en variabel er privat for sum()funktionen. Det betyder, at variablen kun kan tilgås inde i sum()funktionen.

Selvom du erklærer aog bruger det, påvirker det ikke avariablen inde i sum()funktionen.

Bemærk : Generelt bruges lukninger til databeskyttelse.

Interessante artikler...