Παράμετροι Εξωτερικής και Εσωτερικής Συναρτήσεων σε JavaScript

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

javascriptfunction test(num) {
  function func(localNum) {
    console.log(localNum);
  }
}

Ας περάσουμε την παράμετρο της εξωτερικής συνάρτησης στην κλήση της εσωτερικής συνάρτησης:

javascriptfunction test(num) {
  function func(localNum) {
    console.log(localNum); // θα εμφανίσει 1
  }
  
  func(num); //!! περνάμε την παράμετρο
}

test(1); // περνάμε ως παράμετρο αριθμό

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

Και οι δύο αυτές μεταβλητές θα έχουν τις ίδιες τιμές:

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

test(1);

Η διαφορά μεταξύ τους θα είναι η εξής: εάν στην εσωτερική συνάρτηση αλλάξουμε τη μεταβλητή num - θα αλλάξει και στην εξωτερική συνάρτηση:

javascriptfunction test(num) {
  function func(localNum) {
    num = 2; // αλλάζουμε τη μεταβλητή num
  }
  
  func(num);   // περνάμε την παράμετρο
  console.log(num);  // θα εμφανίσει 2
}

test(1); // περνάμε ως παράμετρο αριθμό

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

javascriptfunction test(num) {
  function func(localNum) {
    localNum = 2; // αλλάζουμε τη μεταβλητή num
  }
  
  func(num); // περνάμε την παράμετρο
}

test(1); // περνάμε ως παράμετρο αριθμό
Задание 1

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

javascriptfunction test(num) {
  function func(localNum) {
    console.log(localNum);
  }
  
  func(num);
}

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

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

javascriptfunction test(num) {
  function func(localNum) {
    console.log(localNum);
  }
  
  func(num + 1);
}

test(1);
Задание 3

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

javascriptfunction test(num) {
  function func(localNum) {
    console.log(num);
  }
  
  func(num + 1);
}

test(1);
Задание 4

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

javascriptfunction test(num) {
  function func(localNum) {
    localNum = 2;
  }
  
  func(num);
  console.log(num);
}

test(1);
Задание 5

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

javascriptfunction test(num) {
  function func(localNum) {
    localNum = 2;
  }
  
  func(num);
  console.log(localNum);
}

test(1);
Задание 6

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

javascriptfunction test(num) {
  function func(localNum) {
    num = 2;
  }
  
  func(num);
  console.log(num);
}

test(1);