Καθολικές Μεταβλητές και Παράμετροι Συναρτήσεων σε JavaScript

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

javascriptfunction func(localNum) {
  console.log(localNum);
}

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

javascriptfunction func(localNum) {
  console.log(localNum);
}

let num = 1; // εξωτερική καθολική μεταβλητή

Ας καλέσουμε τη συνάρτησή μας, περνώντας της τη μεταβλητή num ως παράμετρο:

javascriptfunction func(localNum) {
  console.log(localNum);
}

let num = 1;
func(num); // καλούμε τη συνάρτηση με παράμετρο, θα τυπώσει 1

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

javascriptfunction func(localNum) {
  console.log(num); // θα τυπώσει 1
  console.log(localNum); // θα τυπώσει 1
}

let num = 1;
func(num);

Η ίδια η μεταβλητή localNum θα είναι τοπική μεταβλητή της συνάρτησης και δεν θα είναι προσβάσιμη από έξω:

javascriptfunction func(localNum) {
  
}

let num = 1;
func(num); // καλούμε τη συνάρτηση με παράμετρο
console.log(localNum); // θα δώσει σφάλμα

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

javascriptfunction func(localNum) {
  localNum = 2; // δεν αλλάζει τίποτα έξω
}

let num = 1;
func(num);

Εάν, however, αλλάξουμε μέσα στη συνάρτηση τη μεταβλητή num (την καθολική), τότε οι αλλαγές θα εμφανιστούν και έξω:

javascriptfunction func(localNum) {
  num = 2;
}

let num = 1;
func(num);
console.log(num); // θα τυπώσει 2

Ωστόσο, εάν μέσα στη συνάρτηση δηλώσουμε τη μεταβλητή num μέσω let, τότε δημιουργούμε με αυτόν τον τρόπο μια τοπική μεταβλητή num, που δεν επηρεάζει σε τίποτα την εξωτερική μεταβλητή:

javascriptfunction func(localNum) {
  let num = 2; // δηλώνουμε μέσω let
}

let num = 1;
func(num);
console.log(num); // θα τυπώσει 1 - τίποτα δεν άλλαξε
Задание 1

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

javascriptfunction func(localNum) {
  console.log(localNum);
}

func(1);
Задание 2

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

javascriptfunction func(localNum) {
  console.log(localNum);
}

let num = 1;
func(num);
Задание 3

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

javascriptfunction func(localNum) {
  console.log(localNum);
}

let num = 1;
func(num);
num = 2;
Задание 4

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

javascriptlet num = 1;

function func(localNum) {
  console.log(localNum);
}

num = 2;
func(num);
Задание 5

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

javascriptfunction func(localNum) {
  localNum = 2;
}

let num = 1;
func(num);
console.log(num);
Задание 6

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

javascriptfunction func(localNum) {
  num = 2;
}

let num = 1;
func(num);
console.log(num);
Задание 7

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

javascriptfunction func(localNum) {
  let num = 2;
}

let num = 1;
func(num);
console.log(num);