JavaScriptにおける外部関数と内部関数のパラメータ
外部関数と内部関数の両方がパラメータを受け取るようにしてみましょう:
function test(num) {
function func(localNum) {
console.log(localNum);
}
}
外部関数のパラメータを内部関数の呼び出しに渡します:
function test(num) {
function func(localNum) {
console.log(localNum); // 1を出力
}
func(num); //!! パラメータを渡す
}
test(1); // 数値をパラメータとして渡す
結果として、内部関数では、親関数からの外部変数である変数numと、
内部関数のローカル変数である変数localNumの両方にアクセスできます。
これらの両方の変数は同じ値を持ちます:
function test(num) {
function func(localNum) {
console.log(num); // 1を出力
console.log(localNum); // 1を出力
}
func(num);
}
test(1);
それらの違いは次のとおりです:もし内部関数で変数numを変更すると、
それは外部関数でも変更されます:
function test(num) {
function func(localNum) {
num = 2; // 変数numを変更
}
func(num); // パラメータを渡す
console.log(num); // 2を出力
}
test(1); // 数値をパラメータとして渡す
一方、変数localNumはローカルです。
その変更は外部関数に何の変化も引き起こしません。
さらに、変数localNum自体も内部関数の外からは見えません:
function test(num) {
function func(localNum) {
localNum = 2; // 変数numを変更
}
func(num); // パラメータを渡す
}
test(1); // 数値をパラメータとして渡す
コードを実行せずに、コンソールに何が出力されるかを判断してください:
function test(num) {
function func(localNum) {
console.log(localNum);
}
func(num);
}
test(1);
コードを実行せずに、コンソールに何が出力されるかを判断してください:
function test(num) {
function func(localNum) {
console.log(localNum);
}
func(num + 1);
}
test(1);
コードを実行せずに、コンソールに何が出力されるかを判断してください:
function test(num) {
function func(localNum) {
console.log(num);
}
func(num + 1);
}
test(1);
コードを実行せずに、コンソールに何が出力されるかを判断してください:
function test(num) {
function func(localNum) {
localNum = 2;
}
func(num);
console.log(num);
}
test(1);
コードを実行せずに、コンソールに何が出力されるかを判断してください:
function test(num) {
function func(localNum) {
localNum = 2;
}
func(num);
console.log(localNum);
}
test(1);
コードを実行せずに、コンソールに何が出力されるかを判断してください:
function test(num) {
function func(localNum) {
num = 2;
}
func(num);
console.log(num);
}
test(1);