Параметри спољашње и унутрашње функције у 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);