Js从头学起(基本数据类型和引用类型的参数传递详细分析)

 更新时间:2012年02月16日 20:14:04   作者:  
Js中所有函数的参数传递都是按值传递的,也就是把函数外面的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。下面举几个特别的例子
1、基本数据类型传递参数:
复制代码 代码如下:

  funciton addTen(num){
    num+=10;
    return num;
  }
  var count=20;
  var result=addTen(count);
  alert(count);//20
  alert(resullt);//30

  执行结果是:20和30。在这段代码中,将变量count当做参数传递给了函数addTen,也就是相当于将变量count的值复制给了函数addTen的参数。这时addTen的参数num可以看做是函数内部的一个变量。在上段代码中,就相当于两个基本数据类型变量之间的值复制。而基本数据类型都有自己独立的内存地址,所以num和count是没有任何关系的,他们只是值相等而已,函数执行完毕后,count的值并没有改变。而函数外面的result是被直接赋值的,所以result的值就是函数的结果30。
  2、引用类型传递参数:
复制代码 代码如下:

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

  执行结果是:LSN。在这段代码中,函数setName的作用是给obj对象添加了一个属性name并给该属性赋值为"LSN",因为obj是引用类型,所以这里属于是将引用类型person赋值给了obj,也就是说person和obj引用了一个内存地址,所以当给obj新加了属性name时,在函数外面的person也跟着改变,最后person.naem的结果为LSN。
  3、引用类型传递参数到底传的是值还是引用?
复制代码 代码如下:

  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就已经成为函数内部的局部对象了,这个对象会在函数执行完毕后自动销毁。

相关文章

  • 深入理解JavaScript系列(42):设计模式之原型模式详解

    深入理解JavaScript系列(42):设计模式之原型模式详解

    这篇文章主要介绍了深入理解JavaScript系列(42):设计模式之原型模式详解,原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象,需要的朋友可以参考下
    2015-03-03
  • JavaScript中的运算符讲解

    JavaScript中的运算符讲解

    本文详细讲解了JavaScript中的运算符,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 深入理解JavaScript系列(45):代码复用模式(避免篇)详解

    深入理解JavaScript系列(45):代码复用模式(避免篇)详解

    这篇文章主要介绍了深入理解JavaScript系列(45):代码复用模式(避免篇)详解,本文讲解了默认模式、借用构造函数、借用构造函数并设置原型、共享原型、临时构造函数、klass等内容,需要的朋友可以参考下
    2015-03-03
  • 详解javascript中的变量提升和函数提升

    详解javascript中的变量提升和函数提升

    这篇文章主要介绍了详解javascript中的变量提升和函数提升的相关资料,需要的朋友可以参考下
    2018-05-05
  • js中对象深拷贝方法总结

    js中对象深拷贝方法总结

    js深拷贝这个问题,在实际的工作和面试当中也是经常使用到的。
    还经常有一些公司要求,原生手写实现,这篇文章主要介绍了js中对象深拷贝方法总结,需要的朋友可以参考下
    2022-10-10
  • 取得父标签

    取得父标签

    取得父标签...
    2006-11-11
  • JavaScript中的分号插入机制详细介绍

    JavaScript中的分号插入机制详细介绍

    这篇文章主要介绍了JavaScript中的分号插入机制详细介绍,本文讲解JavaScript中各种情况下的分号插入机制,需要的朋友可以参考下
    2015-02-02
  • javascript事件模型介绍

    javascript事件模型介绍

    在各种浏览器中存在三种事件模型:原始事件模型( original event model),DOM2事件模型,IE事件模型.其中原始的事件模型被所有浏览器所支持,而DOM2中所定义的事件模型目前被除了IE以外的所有主流浏览器支持。
    2016-05-05
  • JavaScript初学者建议:不要去管浏览器兼容

    JavaScript初学者建议:不要去管浏览器兼容

    如果可以回到过去的话,我会告诉自己这句话:初学JavaScript的时候无视DOM和BOM的兼容性,先了解一些基础知识最后再考虑兼容性
    2014-02-02
  • 关于javascript事件响应的基础语法总结(必看篇)

    关于javascript事件响应的基础语法总结(必看篇)

    下面小编就为大家带来一篇关于javascript事件响应的基础语法总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游戏愉快哦
    2016-12-12

最新评论