zoukankan      html  css  js  c++  java
  • javascript参数传址与传值

    一直认为javascript函数的参数是普通的传值,对象的传址.

    今天想把一个对象传到函数里面去重新生成后传出来,才知道我还是有地方理解错了.

    先看http://beba-brook.blogspot.com/2006/06/vs.html的一段代码:

    <html>
    <body>
    <script>
    /*函數宣告
    *********************/
    function FuncA(num,bool){//測試數值和布林
    num++;
    bool=false;
    document.write("在函數FuncA中的變數num值為:"+num+";變數bool值為"+bool+"<br/>");
    }

    function FuncB(str,man){//測試字串和物件
    str="骷髏紳士";
    man.name="劍俠鼻唄";
    document.write("呼叫FuncB時:"+str+";"+man.name+"<br/>");
    }

    /*測試
    *********************/

    var num=1; //數值
    var bool=true; //布林
    var str="布魯克"; //字串

    var man=new Object(); //物件
    man.name="布魯克";

    document.write("呼叫FuncA前,變數num的值為:"+num+"。變數bool的值為

    :"+bool+"<br/>");

    FuncA(num,bool);
    document.write("呼叫FuncA後,變數num的值為:"+num+"。變數bool的值為

    :"+bool+"<br/>");

    document.write("呼叫FuncB前:"+str+"。"+man.name+"<br/>");
    FuncB(str,man);
    document.write("呼叫FuncB後:"+str+"。"+man.name+"<br/>");

    </script>
    </body>
    </html>

    运行结果没问题,与我想象的一样:

    呼叫FuncA前,變數num的值為:1。變數bool的值為:true
    在函數FuncA中的變數num值為:2;變數bool值為false
    呼叫FuncA後,變數num的值為:1。變數bool的值為:true
    呼叫FuncB前:布魯克。布魯克
    呼叫FuncB時:骷髏紳士;劍俠鼻唄
    呼叫FuncB後:布魯克。劍俠鼻唄

     

    但,如果在FuncB中加一句
    str="骷髏紳士";
    man=new Object();
    man.name="劍俠鼻唄";
    结果:

    呼叫FuncB前:布魯克。布魯克
    呼叫FuncB時:骷髏紳士;劍俠鼻唄
    呼叫FuncB後:布魯克。布魯克

    新的man对象并没有返回来.

     

    所以,我现在要这样理解,javascript都是拷贝值的,只是对象拷贝的是对象的地址,所以通过地址引用,可以修改其中的属性.但如果在程序内部更改了这个地址,它是不会传回来的.

    不再折腾了,要想修改东西,还是用return来实现.

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    [译]Vulkan教程(09)窗口表面
    [译]Vulkan教程(08)逻辑设备和队列
    [译]Vulkan教程(07)物理设备和队列家族
    Linux命令行文本工具
    go语言周边
    go第三方常用包
    Centos6安装gcc4.8及以上版本
    pyenv设置python多版本环境
    Redis慢日志
    PHP-CPP开发扩展(七)
  • 原文地址:https://www.cnblogs.com/Athrun/p/1260579.html
Copyright © 2011-2022 走看看