参数的传递

 
Q : 参数 到底是 按值传递 还是 按引用传递 ?
A : 按值传递
 
例子 :
  // 这里用一个经典的 引用类型传递到函数参数中 , 来佐证是按值传递的
  function setName(object){
    object.name = 'name changed'; // ①添加name属性
    object = new Object();        // ②将object指向新的对象
    object.name = 'name not changed'; // ③为新的对象添加name属性
  }
 
  let person = new Object();
  setName(person);
 
  console.log(person.name);//display 'name changed'
 
  分析 :
        步骤①起到效果了
        步骤②中,object指向了新的对象,即 引用的值/地址 改变了
        但是 person并没有指向新的对象(这个新的对象在函数退出时 就销毁了)
        如果是按引用传递,则person应该指向第②步中的新对象,即使后来它销毁了,person也没有理由重新指向原来的对象
        然而结果是 person就是指向了原来的对象,并且name的值已经设置成功, 说明 函数在接收参数的时候, 是按值传递的(值就是复制了的引用)
 
总结一句话 :
      变量的访问 分为 按值访问 以及 按引用访问 ;
      参数的传递 只有 按值传递.
 
 
 
以上是书中的例子 , 但是我感觉并不能佐证 参数按值传递的
以下代码是传说中的 引用类型在访问时 是 按引用访问 .
但是效果 和 上面的函数传参 进行类比 , 反而可以得出 参数是按引用传递的.
 
var person = new Object() ;
person.id = 1 ;
 
var object = person ;  //这一步相当于传递到形参中 , object就是形参
object.id = 2 ;
 
object = new Object();
object.id = 3 ;
 
console.log(person.id); //display 2
 
// 当我 对此感到 疑虑的时候 , 在网上搜索了一下 , 还有说 既不是按值传递 , 也不是按引用传递的. 有人提出了 按共享传递.
// 结果在 这个页面上 看到了一个作者 写的反例代码 以及结论 和我不谋而合 , 哈哈,写书的大神的结论是错误的 O(∩_∩)O~
=================================
posted @ 2019-07-04 13:18  豆豆飞  阅读(122)  评论(0编辑  收藏  举报