JS参数传递

来源:互联网 发布:b站发展史知乎 编辑:程序博客网 时间:2024/05/19 23:57

学了一些语言之后,觉得这个c++还是非常好的,因为他有引用,有值。所以想改变哪个有明确的的办法。但是JS理论上是引用。就是说你改变了形参的值,实参也会改变。后面我试了一下,代码如下:

    function  swap(x, y){        var t = x;        if(x< y){            x = y;            y = t;        }    }    var a = 3;    var b = 4;    swap(a,b);    alert(a);

这段代码就是说比较两个值的大小,把如果第一个数小于第二个数那么就交换,但是最后发现没有交换 a的值是没有变得


后面我有查看了资料。然后知道了JS当中只有对象和数组是使用引用传递,改变的是地址中的值。所以一般的数值传递的是值而不是地址,所以值不会改变。然后我就又试了一下,如果我把这个数定义成对象的数值类,就像Integer一样,一个数值的对象。那么他说对象都是传递的引用,这样定义一个值,打印他的类型的时候也是object但是传递的还是值而不是地址。所以我就纠结了。


一般的数值哪怕事数值对象类型,也传递值不是地址。
只有数组和其他的对象传递地址。后面想想有不对。有查看有关资料,就是高级javascript。里面提到了 这个Js就是值传递没有引用传递也就是说没有了地址指针类似的东西。


怎么解释呢:就是当有了对象之后,对象既有静态的属性也有动态的方法,他改变这个实参的值是通过动态的方法改变的 而不是直接赋给地址中。上代码

function setName(obj){    obj.name = "normal";    obj = new Object();    obj.name = "admin";}var person = new Object();setName(person);alert(person.name); // 结果依旧是 normal

如果他是引用的话那么其中person中的name就变成了admin。但是打印的结果为normal
这个就可以解释为什么定义一个对象的Number类型时也不能改变实参的值。因为他没有相应的方法。

原创粉丝点击