• 参数的传递


     
    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~
    =================================
  • 相关阅读:
    SpringBoot启动里的细节问题
    SpringBoot运行过程从SpringApplication开始解读
    SpringBoot应用启动流程
    SpringBoot上传相关配置
    planUML时序图
    JAVA设计模式--单例模式
    中国云运营商横向对比——IaaS服务对标
    ansible api2.0 多进程执行不同的playbook
    自动化运维平台搭建
    django-将数据库数据转换成JSON格式(ORM和SQL两种情况)
  • 原文地址:https://www.cnblogs.com/lmxxlm-123/p/11131838.html
Copyright © 2020-2023  润新知