zoukankan      html  css  js  c++  java
  • 按值传递和按引用传递

    ECMAScipt中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。

    在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(形参,arguments对象中的一个元素)。而传递引用类型的值,会把这个值在内存的地址复制给一个局部变量,因此当局部变量的变化会反映在函数的外部。

    Javascript代码 :

      function addTen(num){  

         num+=10;  

       return num;  

      }  

          var count=10;  

      var result=addTen(count);  

      aelrt(count);  //20,没有变化

      aelrt(result);  //30

    Javascript代码:

      function setName(obj){  

         obj.name="Nicholas";  

      }  

      var person=new Object();  

      setName(person);  

      alert(person.name);   //Nicholas

     以上代码中创建一个对象,并将其保存在变量person中,然后这个对象被传递到setName()函数中被复制给了obj。

     在这个函数内部,obj和person引用的是同一个对象。

    如果是person是按引用传递的,那么person就会自动修改为指向其name属性为"Gred"的新对象。但是,当接下来再访问person.name时,显示的值仍然是"Nicholas"。

    Javascript代码:

      function setName(obj){  

         obj.name="Nicholas";  

                obj=new Object();  

                obj.name="Greg";  

      }  

      var person=new Object();  

      setName(person);  

      alert(person.name);   //Greg(摘自javascript高级程序设计)

    如果这是按值传递,那么下面代码又为什么说是按引用传递?求高手解答

    var obj1=new Object();  

    var obj2=obj1;

    obj1.name="Nicholas";

    alert(obj2.name);  //Nicholas

    obj1=new Object();

    obj1.name="Greg";

    alert(obj2.name);  //Nicholas

  • 相关阅读:
    js给redio设置哪一个被选中
    问候struts2升级的新版本2.5
    图片上传与显示时候的路径问题
    Json,String,Map之间的转换
    springboot之web
    关于struts2中出现的漏洞,如何测试解决
    Table-valued functions and Scalar-valued functions in SQL Server
    Using system view: sys.sysprocesses to check SqlServer's block and deadlock
    利用sys.sysprocesses检查SqlServer的阻塞和死锁
    SQLSERVER加密解密函数(非对称密钥 证书加密 对称密钥)
  • 原文地址:https://www.cnblogs.com/xjinza/p/3920457.html
Copyright © 2011-2022 走看看