`

关于传值和传引用的插曲

阅读更多
网络上看到一篇文章,《JavaScript 传递参数是值传递?还是值传递啊?》

地址:http://www.xiaoxiaozi.com/2010/03/05/1719/

当然看这之前我是很清晰知道基本数据类型传值,引用数据类型传引用。

刚看了个开头就有点晕了,文章所说:

“在本文开头,首先,十万以及万分肯定的说一句,JavaScript 函数传递参数时,是值传递。”

有兴趣的朋友可以去看原文。 我看了之后就顺手写起了示例代码:

(1) 典型传值

function setName(name)
            {
                name 
= "test";
            }
            
var person = new Object();
            person.name 
= " hechangmin ";
            
            setName(person.name);
            alert(person.name); 
// hechangmin


(2) 典型的传引用

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

我想大家对输出的结果都没异议。这也是我记忆中的理解。

下面带领大家看一些可能引起大家议论的示例:

var x = new Object();
            x.name 
= "test";
                
            
function setName(obj)
            {
                obj 
= x;
                alert(obj 
== x);    // true 因为上一句进行了赋值操作
            }
            
var person = new Object();
            person.name 
= " hechangmin ";
            
            setName(person);
            alert(person.name); 
// hechangmin
            alert(person == x); // false 

传进去的 person 肯定是 引用数据类型。(这点没歧义)

进去后发现 给引用赋以新值 x 。函数内部 alert(obj == x); 也输出了 true

说明赋值是成功的。

而函数执行完毕,发现值依然没变。 就这个结果来看,说是传值还真没什么说不过去的。

但是我随后在 http://www.blogjava.net/magicdoom/archive/2006/02/27/32555.html  (建议有兴趣的朋友可以看看)找到一篇讲 javascript 传值 传引用的文章。

文章有说传递进去的引用型参数,在内部如果直接对引用参数赋值。 javascript 会自动生成一份copy ,而不去影响原有的引用。

===========

综上所述 ,基本就都明白。文章写到这里基本就接近尾声,不过这里提到了 javascript string , 下次有机会总结关于 string 的神奇后,再和大家分享交流。

分享到:
评论

相关推荐

    java中传值还是传引用的的认识

    在 Java 中,传递给函数的参数都是按值传递的,包括基本类型和引用类型。在函数中修改基本类型的参数的值,不影响传到函数中参数,因为函数修改的是复制的内容;在函数中修改类对象的参数的值,会改变其中数据成员的...

    java中传值与传引用

    在Java编程语言中,函数调用时的参数传递方式有两种:传值(Passing by Value)和传引用(Passing by Reference)。虽然Java官方文档中并未明确指出有传引用这一概念,但在实际操作中,Java的行为类似于传引用,尤其...

    引用类型传值方法

    在编程领域,我们经常需要处理各种数据类型,其中包括值类型(value types)和引用类型(reference types)。值类型如整型、浮点型、布尔型等,它们在赋值或作为参数传递时会进行副本复制,而引用类型则有所不同。本...

    JAVA传值与传引用[整理].pdf

    JAVA传值与传引用[整理].pdf

    C++传值调用与引用调用区别实例代码

    当一个函数被调用时,可以通过不同的方式传递参数,其中最常见的是传值(call by value)和传引用(call by reference)两种方法。这两种方式在内存管理、性能影响以及数据修改能力上有着显著的不同。 #### 1. 传值调用...

    php传值和传引用的区别点总结

    在PHP编程中,理解变量的传值和传引用是非常重要的概念,它们决定了函数内部操作对原始变量的影响。下面我们将详细探讨这两个概念的区别、工作原理以及优缺点。 **1. PHP传值** 当一个变量作为参数传递给函数时,...

    传值和传引用-综合文档

    在编程世界中,传值和传引用是两个基础但至关重要的概念,它们直接影响着程序的运行方式和数据处理。在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)这种图形化编程语言中,理解这两个概念对于...

    python基础入门教程:传参是传值还是传引用.pdf

    Python中的参数传递并非简单的"传值"或"传引用",而是一种特殊的机制,通常被称为"传对象引用"。这意味着,当你将一个变量作为参数传递给函数时,实际上是传递了这个变量所引用的对象的引用,而不是对象的副本。 ...

    Java中的传值与传引用实现过程解析

    "Java中的传值与传引用实现过程解析" Java中的传值与传引用是Java编程语言中的一种基础概念,...Java中的传值和传引用是两个非常重要的概念,需要在编程过程中明确地理解和应用它们,以避免出现错误和提高编程效率。

    赋值传值,引用传值,指针传值的区别

    构造函数,借助构造函数 解释 【赋值传值】,【引用传值】,【指针传值】

    Java是传值还是传址引用

    ### Java是传值还是传址引用 #### 一、简单类型是按值传递的 Java在处理简单数据类型(如int、boolean等)时采用的是按值传递的方式。这意味着当你将一个简单类型的值作为参数传递给一个方法时,实际上传递的是这...

    浅析Java方法传值和传引用问题

    在Java编程语言中,方法参数传递机制涉及到两个主要概念:传值和传引用。了解这两个概念对于编写高效、可靠的代码至关重要。本篇文章将深入探讨Java中的方法传值和传引用问题。 首先,让我们理解什么是传值。在Java...

    vue prop属性传值与传引用示例

    vue组件在prop里根据type决定传值还是传引用。 简要如下: 传值:String、Number、Boolean 传引用:Array、Object 若想将数组或对象类型也以值形式传递怎么办呢?如下方式可以实现: // component-A 引用component-...

    JAVA中传值与引用问题

    在Java中,所有的数据类型可以分为两大类:基本类型(如int, double等)和引用类型(如Object, String等)。这两类数据类型的处理方式有所不同: 1. **基本类型**:当传递基本类型时,实际上是传递了该类型的值的...

    23.Java对象作为参数传递是传值还是传引用1

    在Java编程语言中,关于Java对象作为参数传递时的行为,存在一种常见的误解。许多人认为对象是按引用传递,而实际上,Java总是按值传递,包括对象。这里的“值”指的是对象的引用,而不是对象本身。这与C++或C#等...

    labview主VI和子VI的传值、全局变量传值、引用传值

    本文将详细探讨三种常见的传值方式:直接传值、全局变量传值和引用传值。 1. 直接传值 直接传值是最基础的通信方式,通过连线在主VI和子VI之间传递数据。当你在子VI前面板上创建一个输入控件(例如数字或字符串...

    C语言函数调用三种方式 传值调用,引用调用和传地址调.doc

    在C语言中,函数调用主要有三种方式:传值调用、传地址调用和引用调用。这三种调用方式决定了函数如何处理传递给它的参数。下面将详细讲解每种调用方式及其特点。 1. 传值调用(Value Passing) 在这种调用方式中...

Global site tag (gtag.js) - Google Analytics