⊗jsPmClCNG 265 of 505 menu

Καθολική Μεταβλητή Μετρητή σε JavaScript

Θα βγάλουμε τη μεταβλητή num έξω από τις συναρτήσεις, κάνοντάς την έτσι καθολική:

let num = 1; // καθολική μεταβλητή function test() { return function() { console.log(num); num++; }; }

Σε αυτή την περίπτωση, όλες οι συναρτήσεις που επιστρέφονται θα τροποποιούν αυτή την καθολική μεταβλητή και οι μετρητές θα λειτουργούν πλέον εξαρτημένοι ο ένας από τον άλλο:

let num = 1; function test() { return function() { console.log(num); num++; }; } let func1 = test(); // πρώτος μετρητής func1(); // θα εμφανίσει 1 func1(); // θα εμφανίσει 2 let func2 = test(); // δεύτερος μετρητής func2(); // θα εμφανίσει 3 func2(); // θα εμφανίσει 4

Γιατί όμως ο προηγούμενος κώδικάς μας δημιουργούσε ανεξάρτητους μετρητές; Θα θυμηθώ αυτόν τον κώδικα:

function test() { let num = 1; return function() { console.log(num); num++; }; };

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

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

Εάν όμως η num γίνει καθολική μεταβλητή - αυτό θα είναι επίσης closure. Απλώς τα λεξικά περιβάλλοντα των συναρτήσεων που επιστρέφονται θα αναφέρονται στην ίδια μεταβλητή num - οποιεσδήποτε αλλαγές σε αυτή τη μεταβλητή θα είναι ορατές σε όλες τις συναρτήσεις.

Προσδιορίστε, χωρίς να εκτελέσετε τον κώδικα, τι θα εμφανιστεί στην κονσόλα:

let counter = 0; function test() { return function() { console.log(counter); counter++; }; } let func = test; let func1 = func(); let func2 = func(); func1(); func2(); func1(); func2();

Προσδιορίστε, χωρίς να εκτελέσετε τον κώδικα, τι θα εμφανιστεί στην κονσόλα:

function test() { let counter = 0; return function() { return function() { console.log(counter); counter++; }; }; } let func = test()(); let func1 = func; let func2 = func; func1(); func2(); func1(); func2();

Προσδιορίστε, χωρίς να εκτελέσετε τον κώδικα, τι θα εμφανιστεί στην κονσόλα:

function test() { let counter = 0; return function() { return function() { console.log(counter); counter++; }; }; } let func = test(); let func1 = func(); let func2 = func(); func1(); func2(); func1(); func2();
Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη