深入理解JavaScript中的传值与传引用

 更新时间:2013年12月09日 10:21:21   作者:  
这篇文章主要是对JavaScript中的传值与传引用进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助

1.传值(by value)

变量的值被复制出一份,与原来的值将不相干,也就是说即使新的值被修改,原来的值也不会改变,在JavaScript中基本类型都是传值的.

复制代码 代码如下:

function testPassValue()
{
   var m=1;
   var n=2;
   //将m,n的值复制一份,传递到passValue
   passValue(m,n);
   alert(m);  //将是原有的值
}
function passValue(a,b)
{
  a = a+b; //改变a的值,这里a只是原有值的一份copy
  alert(a); 
}

输出结果:
3

1

2.传引用(by reference).

引用本身复制一份传给function,引用指向的对象并没有被复制传递(java中也是如此),在function中,如果改变了对象的属性的值,由于和原来的引用指向的是同一个对象,因此在通过原来的引用访问到的将是修改过的值;

但是如果只是在function中将引用指向一个新的对象,将不会改变原对象的值,改变的只是复制的这一份引用.

复制代码 代码如下:

function testPassValue()
{
  var date = new Date(2006,02,27);
  alert(date.getDate());  //输出为 27
  //将date引用本身复制一份,传递到passReference,注意date所指向的对象并没有被复制
  passReference(date);
  alert(date.getDate());  //输出为12
  //同上
  changeReference(date);
  alert(date.getDate());  //输出还为12
}
function passReference(da)
{
 //由于da和原引用指向的是同一个对象,在function外,通过原有的引用访问到的将是对象的日期属性值,将是修改之后的值.
   da.setDate(12);
}
function changeReference(da)
{
   //此时da引用实际上是原引用的一份copy,将引用本身重新赋值,将不会影响原引用
   da= new Date(2007,05,11);

//将da引用指向一个新的对象,此时原引用指向的还是原来的对象
   alert(da.getDate());     // 输出为11
}


3 特殊的String 

在JavaScript中,String也传引用的. js中只有charAt方法,而没有对应的修改方法,和java中的String相同,都具有不变性.

复制代码 代码如下:

var s1 = "hello";
var s2 = "hell" + "o";
if (s1 == s2)  
alert("s1 = s2");  //这句会不会执行? java用的熟的人可能会认为不会执行(这句话我颇有微词,java中也是会执行的!),因为java中的==比较的是同一性. 事实上在js中对String==比较的是值是否相等,所以这句话会执行. 但是对其他的Object == 比较和java中一样是同一性.

相关文章

  • 使用Electron自制录屏软件

    使用Electron自制录屏软件

    录屏软件对于我们来说都不陌生了,本文我们要做的事情是实现自己的录屏软件,载体使用Electron,因为它更适合录制桌面的场景,下面我们就来看看具体实现方法吧
    2024-01-01
  • koa2服务端使用jwt进行鉴权及路由权限分发的流程分析

    koa2服务端使用jwt进行鉴权及路由权限分发的流程分析

    这篇文章主要介绍了koa2服务端使用jwt进行鉴权及路由权限分发 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • JS按回车键实现登录的方法

    JS按回车键实现登录的方法

    这篇文章主要介绍了JS按回车键实现登录的方法,在web程序设计中非常实用的技巧,可用于表单提交的情况,具有很好的用户体验,需要的朋友可以参考下
    2014-08-08
  • JS优化与惰性载入函数实例分析

    JS优化与惰性载入函数实例分析

    这篇文章主要介绍了JS优化与惰性载入函数,结合具体实例形式分析了JS惰性载入的原理、实现技巧与相关注意事项,需要的朋友可以参考下
    2017-04-04
  • JavaScript异步编程常见面试题汇总

    JavaScript异步编程常见面试题汇总

    本文将带大家学习异步编程这一块内容,鉴于异步编程是js中至关重要的内容,所以我们将学习异步编程涉及到的重点和难点,同时这一块内容也是面试常考范围,希望对大家有所帮助
    2023-02-02
  • 理解JavaScript原型链

    理解JavaScript原型链

    简单说一说对JavaScript原型链的理解,希望对大家学习JavaScript原型链有所帮助,具体内容如下
    2016-10-10
  • JavaScript 实现完美兼容多浏览器的复制功能代码

    JavaScript 实现完美兼容多浏览器的复制功能代码

    这两天在做Web前端时,遇到需求通过js实现文本复制的功能。经过一番测试,终于实现了出来,有需要的小伙伴可以参考下。
    2015-04-04
  • redux.js详解及基本使用

    redux.js详解及基本使用

    Redux我们可以把它理解成一个状态管理器,可以把状态(数据)存在Redux中,以便增、删、改。这篇文章主要介绍了redux.js详解及基本使用,需要的朋友可以参考下
    2019-05-05
  • JavaScript实现网页版五子棋游戏

    JavaScript实现网页版五子棋游戏

    这篇文章主要为大家详细介绍了JavaScript实现网页版五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • js 右键菜单,支持不同对象不同菜单(兼容IE、Firefox)

    js 右键菜单,支持不同对象不同菜单(兼容IE、Firefox)

    版本虽然很老也不符合标准了,不过代码是值得参考的,需要右键菜单的朋友可以参考下。
    2010-01-01

最新评论