• 参数的传递


     
    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~
    =================================
  • 相关阅读:
    EA教程 (四) SQLHelper类
    详解包含、扩展和泛化
    几种常用的单例模式详解
    我的分层
    EA教程(二)数据库
    软件版本号如何定义
    精解PV操作之信号量
    eclipse连接数据库驱动汇总
    [Leetcode 17] 13 Roman to Integer
    Short term goal for 2013 rest time
  • 原文地址:https://www.cnblogs.com/lmxxlm-123/p/11131838.html
Copyright © 2020-2023  润新知