blog

JavaScriptのパラメータ・パス

値が基本的なデータ型の場合、コピーとして関数に直接渡されます。 val => _val 値が複雑なデータ構造である場合、コピーはパフォーマンスの問題を引き起こし、関数内での修正は元の値に影響を与えます...

Feb 1, 2020 · 1 min. read
シェア

パラメータパス

  • 通常の値パス

  • 参照渡し

  • 共有パス

通常の値パス


var val = 1
function demo(v) {
 v = 2
 console.log(v) // 2
}
demo(val)
console.log(val) // 1

値が基本データ型の場合は、関数に直接渡されるコピーです。 val => _val

参照渡し


var obj = {
 val: 1
}
function demo(o) {
 o.val = 2
}
demo(obj)
console.log(obj.val) // 2

値が複雑なデータ構造である場合、コピーはパフォーマンスの問題を引き起こし、関数内の修正は元の値に影響を与える可能性があります。

ここで質問です。oが参照である場合、o = 1は元の値を変更するのでしょうか? 答えはノーです。

共有パス

しかし、値がコピーされたデータ構造である場合、直接参照で渡されるのではなく、値の参照のコピーが渡されることがわかりました。 o.value = 1の場合は参照値を調べて修正し、o = 1の場合はパラメータを直接修正します。

要約すると

javascriptのパスには、値パスと共有パスの2種類しかありません。引用パスと言われたら、反論してください。

Read next

ReactにおけるPureComponentとmemoの浅い比較

// 参照が同じであることを指し、もはや同じものの内部にある2つのオブジェクトの深さを比較しない、これは浅い比較です。

Jan 31, 2020 · 3 min read