引用类型传递参数到底传的是值还是引用

  function setName(obj){
    obj.name="ABC";
    obj=new Object();
    obj.name="BCD";
  }
  var person=new Object();
  setName(person);
  alert(person.name);// ABC

 
 执行结果是:ABC。实例3与实例2的区别是在函数中又加了2行代码,在给obj对象新加一个属性name并赋值后
又将obj定义成了一个新的对象(new
Object()),定义新对象后又name赋上新的值“BCD”。这个时候如果是按引用传递的话,那么最后person对象就会自动修改为指向其
name属性为"BCD"的新对象,但最后显示的却是“ABC”,这说明即使在函数内部修改了参数的值,但原始的引用还保持不变。实际上,当在函数内部
obj=new Object()时 这个新的obj就已经成为函数内部的局部对象了,这个对象会在函数执行完毕后自动销毁。

介于2中类型之间的特殊的字符串类型:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>基本类型/引用类型--字符串</title>
    <script text="text/javascript">
    //字符串比较特殊,长度不固定应该引用,可是某些行为又像基本类型的
        var a="hello";
        var b=a;//拷贝的引用值--想象成一个指针
        a="你好";//实际上是又建立另外一个字符串"你好"并指向它
        alert(b);//hello
        
        //字符串算是一种不变对象
    </script>
    </head>
    <body>

</body>
</html>

时间: 2024-08-05 13:20:50

引用类型传递参数到底传的是值还是引用的相关文章

Java调用函数传递参数到底是值传递还是引用传递

今天翻看微信上有关Java技术的公众号时,看到了一篇关于Java中值传递的问题,文章讨论了在Java中调用函数进行传参的时候到底是值传递还是引用传递这个面试时会问到的问题.之前也接触过类似的问题,但只是知道是值传递,具体到为什么,一直不是太清楚.今天看了一下,算是明白了,写个博客记录一下. 首先先声明一下,在Java中函数传参是值传递,不是引用传递.要弄清楚这个问题之前要先弄清楚什么是值传递,什么是引用传递. 值传递(pass by value):是指在调用函数时将实际参数复制一份传递到函数中,

函数(定义,有无返回值,参数以及传参问题)

1.定义 def test(): x+=1 return x好处:*减少代码重用 *保持一致性和易维护性 *可扩展性2.关于有无返回值 无:过程就是没有返回值的函数 有:一个————返回本身 def test(): s=[5,4,32,556,22] return s print(test()) #打印结果 [5, 4, 32, 556, 22] 多个————返回元祖 def test(): l=[5,4,32,556,22] s='fjy' return l,s print(test()) #

方法传递参数的分类

方法传递参数的分类 1.基本数据类型 2.引用数据类型 package com.erlang.idea; //Java程序默认导入java.lang包下的所有类. public class ScannerTest { public static void main(String[] args) { int number = 10; System.out.println("调用change方法前:"+number);//16 change(number); System.out.prin

C++入门经典-例5.19-指针的引用与传递参数

1:引用传递参数与指针传递参数能达到同样的目的.指针传递参数也属于一种值传递,其传递的是指针变量的副本.如果使用指针的引用,就可以达到在函数体内改变指针地址的目的.运行代码如下: // 5.19.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using std::cout; using std::endl; static int global=16;//静态全局变量 void getMax(i

java 传参方式--值传递还是引用传递

java 传参方式--值传递还是引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递.写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用传递参数,以避免因依赖“按引用传递”这一行为而导致的常见编程错误. 对此节选的某些反馈意见认为,我把这一问题搞糊涂了,或者将它完全搞错了.许多不同意我的读者用 C++ 语言作为例子.因此,在此栏目中我将使用 C++ 和 Java 应用程序进一步阐明一些事实. 要点 读完所有的评论以后,问题终于明白了

Java中只有按值传递,没有按引用传递!(两种参数情况下都是值传递)

今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出! 先来看一个作为程序员都熟悉的值传递

C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习

1)形参 形参顾名思义就是形式上的参数,不是实际的参数,它代替实际传入方法的值.在方法体代码中代表了值本身参与运算.形参定义于参数中,它不同于方法体内局部变量,因为是一个变量,在它的作用域内不允许存在一个同名的局部变量,不管他们的类型是否相同,都是不允许出现同名的. 看下面的代码示例: 1 //这其中的strName就是一个形参也是一个变量,不允许出现同名的局部变量 2 public void SayHelloTo(string strName) 3 { 4 Console.WriteLine(

基本类型、引用类型的复制、传递参数

基本类型:指的是简单的数据段.基本数据类型是按值访问的,因为可以操作保存在变量中的实际值. 引用类型:指那些由多个值构成的对象.引用类型的值是保存在内存中的对象.JavaScript不允许访问内存中的位置,也就是说不能直接操作对象的内存空间.在操作对象时,实际上是在操作对象的引用而不是实际的对象,为此,引用类型的值是按引用访问的. 复制变量值 1.基本类型的复制 从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到新变量分配的位置上.在此之后的任何操作,两个值之间

基本类型传递值与引用类型传递值的区别

var username="小明"; function fn1(name){ name="小强"; } fn1(username); console.log(username) //输出 小明 // 分析:基本类型传递是按照值来传递的 // 如果传参是基本数据类型, 传入函数后,都会变成局部对象,所以对局部对象的修改,对原始值没有影响 // 而这个局部对象 也会在函数执行完毕后,立刻被销毁. var user={name:"小红"}; funct