JavaScriptにおける値伝達と引用伝達

1554 ワード

2018/08/07
まずこの二つの伝達に対する理解を話してください.
  • 値転送は、変数の値を別の変数に再コピーします.両者の間には他の関連がありません.
  • 参照転送は、変数がヒープメモリに向けられているポインタを別の変数にコピーします.簡単にいうと、その一つの値が変化し、もう一つは変更されました.(これは私個人の浅はかな理解です.)
  • 値は、JavaScriptの5つの基本データタイプにわたって値によって伝達される.
  • let foo = 1
    let bar = foo
    
    bar = 2
    console.log(foo) // foo = 1
    
  • 引用伝達なら、もう一つのObjectのデータタイプはきっと引用によって伝達されました.
    let foo = {
      message: 'i am message'
    }
    let bar = foo
    
    bar.message = 'no, i am text'
    console.log(foo) // foo = {message: "no, i am text"}
    
    //彼女が小説を読んで目を全部見ました.本当に頑張ります.2018/08/07 23:19
    2018/08/08
    昨日の話を続けます.引用伝達を見たばかりの時は、次のような例だと思いました.
    let foo = {
      message: 'i am message'
    }
    let bar = foo
    
    bar = 'no, i am text'
    // [       'no, i am text']
    //        
    console.log(foo) // foo = {message: 'i am message'}
    console.log(bar) // bar ='no, i am text'
    
    barが再賦課された時、元々fooを指すポインタが切れたという感じです. , 。パラメータ転送
    赤い宝の本の中で言います:ECMAScriptの中ですべての関数のパラメーターはすべて値によって伝達したのです.
    パラメータ伝達は、基本的なデータタイプと参照データタイプを伝達することができる.
  • は、基本的なデータタイプを転送する際に、転送された値を一部の変数にコピーしたものである.
  • 転送参照データタイプは、転送された値をメモリ内のアドレスにコピーした部分変数
  • である.
    よくあるデモは記録しないで、1つの紅宝の本の中の例を記録します.
    function setName(object) {
      object.name = 'Jack'
      object = new Object() //           ,   object      ,       
      object.name = 'Owen'
    }
    
    let person = new Object()
    setName(person)
    console.log(person.name)
    
    //彼女は寝ないし、最悪です.毎日彼女を監督します.2018/08/08 23:30