javascript 传值方式

结论:javascript是按值传递的

1.基本类型的按值传递

javascript的基本类型传递的意思就是把变量的【值】拷贝一份传递过去,但是当前变量本身不改变。
效果:对变量的修改【不会影响到原来的变量的值】。
基本数据类型包括:Number、String 、Boolean、Null和Undefined
举例如下:

   var value = 1;
    function  foo(v) {
        v = 2;
        console.log(v);
    }

    foo(value);
    console.log(value);

输出结果:

2
1

2.引用类型的按值传递:修改对象属性

引用类型按值传递的意思就是把当前对象的引用值拷贝一份传递过去(原对象和函数变量的引用都指向同一个引用),所以对对象属性的修改就会保留下来,引用类型之所以传递的是对象引用值的拷贝是因为因为当值是一个复杂的数据结构的时候,拷贝就会产生性能上的问题
效果:对引用类型【属性的修改会反映到原来对象上】。
举例如下:

  var obj = {
        value: 1
    };
    function foo(o) {
        o.value = 2;
        console.log(o.value);
    }

    foo(obj);
    console.log(obj.value);

输出结果:

2
2

3.引用类型的按值传递:修改函数参数的引用

引用类型按值传递:传递的还是当前对象的【引用值】拷贝。
这个时候,如果直接修改函数变量的引用,其实修改的是哪个拷贝的引用,当然对原对象没有任何影响了。
效果:对参数的直接修改(引用修改)【对原来对象没有任何影响】。
举例如下:

var obj = {
      value: 1
    };

    function foo(o) {
        o =2;
        console.log(o);
    }

    foo(obj);
    console.log(obj);
    console.log(obj.value)

输出结果:

2
1

总结:javascript是按值传递的

区别在于基本类型传递的是具体值的拷贝,而引用类型传递的是引用值的拷贝,对于对引用传递的修改会不会影响到原来对象的属性,就看在函数中修改的是引用本身(仅仅是参数引用指向另一个地址而已,所以对原对象没有任何影响,这里关键要理解:原对象的引用、和参数的引用其实是两个完全独立的引用(或者说是指针),他们的共同点就是指向到相同的内存地址而已),还是修改的引用值的属性修改参数引用的属性会影响到原对象的属性)。

其实不仅是javascript,java也是这样的传值方式,其他编程语言相信也是这样的传值方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值