Πώς λειτουργεί η μεταφορά δεδομένων μέσω αναφοράς και μέσω τιμής;
sobes.tech AI
Απάντηση από AI
Η μεταφορά δεδομένων με τιμή (by value) και με αναφορά (by reference) καθορίζει πώς αλλάζει η αρχική μεταβλητή κατά τη μεταβίβαση σε μια συνάρτηση ή κατά την ανάθεση.
Μεταφορά με τιμή:
Δημιουργείται ένα αντίγραφο της τιμής της μεταβλητής. Οποιαδήποτε αλλαγή σε αυτό το αντίγραφο μέσα στη συνάρτηση ή κατά την ανάθεση δεν επηρεάζει την αρχική μεταβλητή. Είναι κατάλληλο για πρωταρχικούς τύπους δεδομένων (αριθμούς, συμβολοσειρές, boolean, null, undefined, Symbol, BigInt).
// Μεταφορά με τιμή
let a = 10;
function modifyValue(num) {
num = 20; // Το αντίγραφο αλλάζει
}
modifyValue(a);
console.log(a); // Θα εμφανίσει 10 - η αρχική τιμή δεν άλλαξε
Μεταφορά με αναφορά:
Δεν περνάει η ίδια η τιμή, αλλά μια αναφορά (διεύθυνση στη μνήμη) σε αυτήν. Οι αλλαγές μέσω αυτής της αναφοράς επηρεάζουν την αρχική μεταβλητή. Στη JavaScript, αυτό ισχύει για αντικείμενα (συμπεριλαμβανομένων των πινάκων και των συναρτήσεων). Είναι σημαντικό να καταλάβετε ότι δεν περνάει το αντικείμενο αυτό καθ' εαυτό, αλλά μια αναφορά σε αυτό. Όταν μια παράμετρος επαναπροσδιορίζεται μέσα σε μια συνάρτηση, η αναφορά λαμβάνει μια νέα τιμή, αλλά η αρχική μεταβλητή δεν αλλάζει.
// Μεταφορά με αναφορά (για αντικείμενα)
let obj1 = { value: 10 };
function modifyObject(obj) {
obj.value = 20; // Η ιδιότητα του αντικειμένου αλλάζει μέσω αναφοράς
}
modifyObject(obj1);
console.log(obj1.value); // Θα εμφανίσει 20 - το αρχικό αντικείμενο άλλαξε
// Παράδειγμα επαναπροσδιορισμού της παραμέτρου κατά τη μεταβίβαση ενός αντικειμένου
let obj2 = { value: 10 };
function reassignObject(obj) {
obj = { value: 30 }; // το obj τώρα αναφέρεται σε ένα νέο αντικείμενο στην τοπική εμβέλεια της συνάρτησης
}
reassignObject(obj2);
console.log(obj2.value); // Θα εμφανίσει 10 - το αρχικό αντικείμενο δεν άλλαξε
| Χαρακτηριστικό | Μεταφορά με τιμή | Μεταφορά με αναφορά |
|---|---|---|
| Τι περνάει | Αντίγραφο της τιμής | Αναφορά στην τιμή |
| Επίδραση στο αρχικό | Όχι | Ναι (όταν αλλάζουν ιδιότητες) |
| Τύποι δεδομένων JS | Πρωταρχικοί τύποι | Αντικείμενα |