JavaScript的值传递(传递的是地址值)

今天学到了javascript的值传递,一句话,简直坑爹。

我已经忍了这个弱类型的程序语言一天半了,但今天下午实在是忍不了了(这个破语言,垃圾!),它竟然和其它的高级语言不一样,传值竟然传递的是地址值,你敢信!?

学它要颠覆我的认知,写下此贴,记录下我的吐槽,顺便给自己提个醒。

第一个代码:

        因为函数传递的值实质上是地址值,所以在子函数 fn() 体内,变量a得到了obj的地址,此时对a.name的修改会传回主函数, 这也导致了 主函数上的obj.name的值的变化。

    <script>
        function fn(a)
        {
            document.write(a.name +"<br>");   //孙悟空

            // a={};

            a.name="猪八戒";
            document.write(a.name +"<br>");   //猪八戒

        }

        let obj={name:"孙悟空"};

        fn(obj);
        document.write(obj.name +"<br>");     //猪八戒;注意,这里obj的值被修改了。

    </script>

第二个代码:

        这个代码仅仅比上一个代码多了一句:a={};  这会新建一个对象,让变量a重新指向了一个新的地址值。这时,对a进行的一切操作与obj无关,所以主函数里的obj的值不会变化。

    <script>
        function fn(a)
        {
            document.write(a.name +"<br>");  //孙悟空

            a={};  //关键点,这里变量a重新指向了一个新的地址值。

            a.name="猪八戒";
            document.write(a.name +"<br>");  //猪八戒

        }

        let obj={name:"孙悟空"};

        fn(obj);
        document.write(obj.name +"<br>");   //孙悟空; 注意,这里obj的值没有变。

    </script>

第三个代码:

这个是C语言,函数传递的参数的值,不是地址值,因此在子函数里对变量a进行的一切修改不会影响主函数里的变量a。

#include<stdio.h>
#include<stdlib.h>


void func(int a)
{
	a = 3;
	printf("func里的a的值:%d \n", a);      //func里的a的值:3
}

int main(){
	int a = 4;
	func(a);

	printf("main里的a的值:%d", a);        //main里的a的值:4
}

明确一下结论:JavaScript的函数的参数传递,传递的都是值,参数是 Object 类型的也一样,也是值,只不过这个值是地址值。

这与C,Visual Basic或Delphi等其他语言完全不同。再次强调,注意。

参考连接:JavaScript中函数都是值传递吗? - Victor的回答 - 知乎

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值