Κλείσιμο JavaScript

Σε αυτό το σεμινάριο, θα μάθετε για το κλείσιμο JavaScript με τη βοήθεια παραδειγμάτων.

Πριν μάθετε για το κλείσιμο, πρέπει να καταλάβετε δύο έννοιες:

  • Ένθετη συνάρτηση
  • Επιστροφή συνάρτησης

Συνδεμένη συνάρτηση JavaScript

Στο JavaScript, μια συνάρτηση μπορεί επίσης να περιέχει μια άλλη συνάρτηση. Αυτό ονομάζεται ένθετη συνάρτηση. Για παράδειγμα,

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

Στο παραπάνω πρόγραμμα, η greet()συνάρτηση περιέχει τη displayName()συνάρτηση μέσα σε αυτό.

Επιστρέφοντας μια συνάρτηση

Στο JavaScript, μπορείτε επίσης να επιστρέψετε μια συνάρτηση μέσα σε μια συνάρτηση. Για παράδειγμα,

 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

Παραγωγή

 function displayName () (console.log ("Hi" + "+ name);) Γεια John

Στο παραπάνω πρόγραμμα, η greet()συνάρτηση επιστρέφει τον displayNameορισμό της συνάρτησης.

Εδώ, ο ορισμός της επιστρεφόμενης συνάρτησης εκχωρείται στη μεταβλητή g1. Όταν εκτυπώνετε το g1 χρησιμοποιώντας console.log(g1), θα λάβετε τον ορισμό της λειτουργίας.

Για να καλέσουμε τη συνάρτηση που είναι αποθηκευμένη στη μεταβλητή g1, χρησιμοποιούμε g1()με παρενθέσεις.

Κλείσιμο JavaScript

Στο JavaScript, το κλείσιμο παρέχει πρόσβαση στο εξωτερικό εύρος μιας συνάρτησης από το εσωτερικό της εσωτερικής λειτουργίας, ακόμη και μετά το κλείσιμο της εξωτερικής λειτουργίας. Για παράδειγμα,

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

Παραγωγή

 function displayName () (// πρόσβαση μεταβλητής ονόματος επιστροφή "Hi" + "+ name;) Γεια John

Στο παραπάνω παράδειγμα, όταν greet()καλείται συνάρτηση, επιστρέφει τον ορισμό της συνάρτησης του displayName.

Εδώ, g1είναι μια αναφορά στη displayName()συνάρτηση.

Όταν g1()καλείται, εξακολουθεί να έχει πρόσβαση στη greet()λειτουργία.

Όταν εκτελούμε console.log(g1), επιστρέφει τον ορισμό της συνάρτησης.

Η έννοια του κλεισίματος υπάρχει για άλλες γλώσσες προγραμματισμού όπως Python, Swift, Ruby κ.λπ.

Ας ρίξουμε μια ματιά σε ένα άλλο παράδειγμα.

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

Στο παραπάνω πρόγραμμα, η calculate()συνάρτηση παίρνει ένα μόνο όρισμα xκαι επιστρέφει τον ορισμό της multiply()συνάρτησης. Η multiply()συνάρτηση παίρνει ένα μόνο όρισμα yκαι επιστρέφει x * y.

Και τα δύο multiply3και multiply4είναι κλείσιμο.

Η calculate()συνάρτηση ονομάζεται μεταβίβαση μιας παραμέτρου x. Όταν multiply3και multiply4καλείται, η multipy()συνάρτηση έχει πρόσβαση στο πέρασμα x του εξωτερικού συνόλου calculate().

Ιδιωτικότητα δεδομένων

Το κλείσιμο JavaScript βοηθά στο απόρρητο δεδομένων του προγράμματος. Για παράδειγμα,

 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

Στο παραπάνω παράδειγμα, η sum()συνάρτηση επιστρέφει τον ορισμό της increaseSum()συνάρτησης.

Η μεταβλητή αυξάνεται μέσα στη increaseSum()συνάρτηση. Ωστόσο, η τιμή μιας μεταβλητής μπορεί επίσης να αλλάξει εκτός της συνάρτησης. Σε αυτήν την περίπτωση, a = a + 1;αλλάζει την τιμή της μεταβλητής εκτός της συνάρτησης.

Τώρα, εάν θέλετε μια μεταβλητή να αυξάνεται μόνο μέσα στη συνάρτηση, μπορείτε να χρησιμοποιήσετε ένα κλείσιμο. Για παράδειγμα,

 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

Στο παραπάνω παράδειγμα, η sum()συνάρτηση ορίζει την τιμή a έως 0 και επιστρέφει τη increaseSum()συνάρτηση.

Λόγω του κλεισίματος, παρόλο που sum()έχει ήδη εκτελεστεί, increaseSum()εξακολουθεί να έχει πρόσβαση σε ένα και μπορεί να προσθέσει 1 σε κάθε φορά x()που καλείται.

Και η μεταβλητή είναι ιδιωτική για τη sum()συνάρτηση. Αυτό σημαίνει ότι η μεταβλητή είναι προσβάσιμη μόνο εντός της sum()συνάρτησης.

Ακόμα και αν το δηλώσετε aκαι το χρησιμοποιήσετε, δεν επηρεάζει τη aμεταβλητή στο εσωτερικό της sum()συνάρτησης.

Σημείωση : Γενικά, το κλείσιμο χρησιμοποιείται για το απόρρητο των δεδομένων.

ενδιαφέροντα άρθρα...