zoukankan      html  css  js  c++  java
  • js中函数参数值传递和引用传递

    js中函数参数值传递和引用传递:
    在阅读本章节之前建议参阅一下两章节:
    1.值类型可以参阅javascript的值类型一章节。
    2.引用类型可以参阅javascript的引用类型一章节。
    一.函数传递值类型:
    代码实例如下:

    复制代码
    function addNum(num)
    { 
     num+=10; 
     return num; 
    } 
    var num=10; 
    var result=addNum(num); 
    console.log(num);
    console.log(result);
    复制代码

    以上代码的弹出值分别为:10和20,下面进行一下分析:
    声明变量num并复制为10,这个是num是一个值类型,当为函数传递参数的时候,是将此值复制一份传递给函数,所以在函数执行之后,num本身的值并没有被改变,函数中被改变的值仅仅是一个副本而已。
    二.函数传递引用类型:

    复制代码
    function setName(obj)
    { 
      obj.name="青岛新锐"; 
    } 
    var web=new Object(); 
    web.name="蚂蚁部落";
    setName(web); 
    console.log(web.name);
    复制代码

    以上代码的弹出值是:“青岛新锐”,下面进行一下分析:
    声明一个对象web,它是一个引用类型,当为函数传递参数的时候,是传递的web对象的引用,也就是此对象的内存地址,所以在函数中修改属性的对象就是函数外面创建的对象本身。
    三.加深理解:

    复制代码
    function setName(obj)
    { 
      obj.name="青岛新锐"; 
      obj=new Object(); 
      obj.name="蚂蚁部落"; 
    } 
    var web=new Object(); 
    setName(web); 
    console.log(web.name);
    复制代码

    以上代码的弹出值是:青岛新锐,很多人可能会以为将会弹出“蚂蚁部落”,下面进行一下简单的分析:
    在函数外面创建一个对象,并将对象的引用赋值给变量web,web中存储的是对象在内存中的存储地址,当为函数传递参数时,就是传递的在函数外面创建的对象的地址。在函数中,为外面创建的对象创建一个自定义属性name并赋值为“青岛新锐”,然后又创建一个新的对象,并将新对象的地址赋值给obj,这个时候obj指向的并不是函数外面创建的对象,所以外面对象name属性不会被改变。

    函数内创建object对象不会改变外面的属性值 web.name直接读取函数的属性

    原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=9052

    更多内容可以参阅:http://www.softwhy.com/javascript/

  • 相关阅读:
    爬虫再探之mysql简单使用
    python3爬虫再探之EXCEL(续)
    python3爬虫再探之EXCEL
    python3爬虫初探(五)之从爬取到保存
    python3爬虫初探(四)之文件保存
    python3爬虫初探(三)之正则表达式
    python3爬虫初探(二)之requests
    HDU5399——贪心——Too Simple
    ZOJ2829——贪心——Known Notation
    DOS命令
  • 原文地址:https://www.cnblogs.com/refe/p/5101744.html
Copyright © 2011-2022 走看看