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);