JavaScript bezárások

Ebben az oktatóanyagban példák segítségével megismerheti a JavaScript bezárásait.

Mielőtt elsajátítaná a bezárásokat, meg kell értenie két fogalmat:

  • Beágyazott funkció
  • Funkció visszaadása

JavaScript beágyazott funkciója

A JavaScript-ben egy függvény tartalmazhat más funkciót is. Ezt hívjuk beágyazott függvénynek. Például,

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

A fenti programban a greet()függvény tartalmazza a displayName()benne lévő funkciót.

Funkció visszaadása

A JavaScript-ben funkciót is visszaadhat egy függvényen belül. Például,

 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

Kimenet

 function displayName () (console.log ('Szia' + '' + név);) Szia John

A fenti programban a greet()függvény visszaadja a displayNamefüggvény definícióját.

Itt a visszaküldött függvénydefiníció a g1 változóhoz van rendelve. Ha a g1 használatával nyomtat console.log(g1), megkapja a függvénydefiníciót.

A g1 változóban tárolt függvény meghívásához g1()zárójelekkel használjuk .

JavaScript bezárások

A JavaScriptben a bezárás hozzáférést biztosít a függvény külső hatóköréhez a belső függvény belsejéből, még akkor is, ha a külső funkció bezárult. Például,

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

Kimenet

 function displayName () (// a névváltozó elérése visszaadja 'Hi' + '' + name;) Szia John

A fenti példában, ha greet()függvényt hívunk meg, akkor a függvény definícióját adja vissza displayName.

Itt g1egy hivatkozás a displayName()függvényre.

Amikor g1()hívják, akkor is hozzáfér a greet()funkcióhoz.

Amikor futunk console.log(g1), visszaadja a függvény definícióját.

A bezárás fogalma létezik más programozási nyelveknél is, mint a Python, a Swift, a Ruby stb.

Nézzünk meg egy másik példát.

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

A fenti programban a calculate()függvény egyetlen argumentumot vesz fel, xés visszaadja a függvény multiply()függvénydefinícióját. A multiply()függvény egyetlen argumentumot vesz fel, yés visszatér x * y.

Mindkettő multiply3és multiply4bezárás.

A calculate()függvényt paraméter átadásának nevezzük x. Amikor multiply3és mikor multiply4hívják meg, a multipy()függvény hozzáfér a külső calculate()függvény átadott x argumentumához .

Adatvédelem

A JavaScript bezárása elősegíti a program adatvédelmét. Például,

 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

A fenti példában a sum()függvény visszaadja a függvény increaseSum()függvénydefinícióját.

A változó a increaseSum()függvényen belül megnövekszik . A változó értéke azonban a függvényen kívül is megváltoztatható. Ebben az esetben a = a + 1;megváltoztatja a változó értékét a függvényen kívül.

Most, ha azt szeretné, hogy a változó csak a függvényen belül növekedjen, használhat egy lezárást. Például,

 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

A fenti példában a sum()függvény az a értékét 0-ra állítja, és visszaadja a increaseSum()függvényt.

A bezárás miatt, annak ellenére sum(), hogy már végrehajtva van, increaseSum()mégis hozzáfér a -hoz, és minden egyes híváskor hozzáadhat 1- et x().

A változó pedig privát a sum()függvényhez. Ez azt jelenti, hogy a változó csak a sum()függvény belsejében érhető el .

Még akkor is, ha deklarálja aés használja, ez nem befolyásolja a afüggvényen belüli változót sum().

Megjegyzés : Általában a bezárásokat használják az adatvédelem érdekében.

érdekes cikkek...