仮引数を関数本体内で操作しても、実引数の変数に影響しない場合の例。
まず、x = y
の後、y = z
としても、xがzになるわけではないので、もはやxとyは別物。
// y = x の後、一方の変更が他方に影響するか?
let x, y
let 基本型 = ['もじ', 3.14, NaN, Infinity, true, false, undefined, null, Symbol('foo')]
let 参照型 = [{}, [], function() {}, /^abc$/, new String('abc'), new Number(3.14)]
let 全てそう = 基本型.concat(参照型).every((e) => {
x = e
y = x
// オブジェクトのプロパティではなく、変数自体に代入
y = 'y自体の変更'
return x !== y // xとyは別のものを指すことになる
})
console.log(全てそう) // true
// 一方を「それ自体」を代入で変えても他方に影響ないのは、基本型も参照型も同じ。
仮引数でも同様で、関数本体内で仮引数 = 他オブジェクト
とすると、仮引数は実引数とは縁が切れるのであって、実引数に変更が加わるわけではない。
// 仮引数の変更が実引数に影響するか?
function 変更(仮引数) {
仮引数 = 'それ自体の変更'
return 仮引数
}
let 基本型 = ['もじ', 3.14, NaN, Infinity, true, false, undefined, null, Symbol('foo')]
let 参照型 = [{}, [], function() {}, /^abc$/, new String('abc'), new Number(3.14)]
let 実引数
let 全てそう = 基本型.concat(参照型).every((e) => {
実引数 = e
return 実引数 !== 変更(実引数) // 実引数と仮引数は別物になっている
})
console.log(全てそう) // true
// 仮引数を「それ自体」を代入で変えても実引数に影響ないのは、基本型も参照型も同じ。