⊗jsPmClLEA 261 of 505 menu

Εφαρμογή του Λεξικού Περιβάλλοντος Συναρτήσεων στο JavaScript

Ας υποθέσουμε ότι έχουμε μια συνάρτηση, που επιστρέφει ως αποτέλεσμα μια άλλη συνάρτηση:

function test() { return function() { } }

Εάν η γονική συνάρτηση έχει οποιεσδήποτε μεταβλητές, τότε αυτές οι μεταβλητές θα περιέχονται στο λεξικό περιβάλλον της συνάρτησης που επιστρέφεται:

function test() { let num = 1; // μεταβλητή της γονικής συνάρτησης return function() { // λεξικό περιβάλλον = {num: 1} } }

Ας γράψουμε στον κώδικα της συνάρτησης που επιστρέφουμε ένα console.log, που να εμφανίζει την τιμή της μεταβλητής num:

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

Ας καλέσουμε τώρα τη γονική συνάρτηση test και το αποτέλεσμα της εργασίας της να το καταγράψουμε σε μια μεταβλητή func:

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

Στη μεταβλητή func θα καταγραφεί η συνάρτηση που επιστρέφεται. Ας καλέσουμε τη συνάρτησή μας - ως αποτέλεσμά της θα εμφανίσει το περιεχόμενο της μεταβλητής num:

function test() { let num = 1; return function() { console.log(num); } } let func = test(); func(); // θα εμφανίσει 1

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

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // η μεταβλητή num εδώ δεν είναι προσβάσιμη

Όπως βλέπετε, η τοπική μεταβλητή num δέθηκε στο λεξικό περιβάλλον της συνάρτησής μας και τώρα, καλώντας σε οποιοδήποτε σημείο του κώδικα αυτή τη συνάρτηση, μπορούμε να πάρουμε την τιμή της μεταβλητής num, ακόμα κι αν στο σημείο κλήσης η ίδια η μεταβλητή δεν είναι προσβάσιμη.

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

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

Εδώ, ωστόσο, θα υπάρχει μια σημαντική διαφορά: στη νέα εκδοχή η μεταβλητή num μπορεί να αλλάζει έξω από τις συναρτήσεις (καθώς είναι καθολική), ενώ στην παλιά - όχι.

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

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } let func = test(); console.log(func());

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

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } console.log(test()());

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

function test() { let num1 = 1; return function() { return num1 + num2; } } let num2 = 2; let func = test(); console.log(func());

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

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Ελληνικά
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 για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη