记录某晓公司一条坑爹的面试题

本文深入解析JavaScript中函数参数的引用传递特性,通过具体代码示例解释为何对象引用改变不会直接影响原始变量,帮助读者理解AO对象在函数调用中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

写出下列代码的数据结果

    var a = {a:1},b={b:2}
    
    !function(agu1, agu2){
        agu1 = agu2;
        agu2['c'] = 3;
    }(a,b)

    console.log(JSON.stringify(a),JSON.stringify(b))

本来以为考的是引用传递,认为agu1 = agu2 使a = b, 所以输出结果应该都是{"b":2,"c":3} ,结果不出意料的挂了。在浏览器运行结果是 {"a":1} {"b":2,"c":3}

做一回事后诸葛分析一下,这里用到AO对象(不了解的自行百度学习),过程以注释的方式写在代码中。

    var a = {a:1},b={b:2}
    
    !function(agu1, agu2){ // AO.agu1 AO.agu2
        agu1 = agu2; // AO.agu1 = AO.agu2
        agu2['c'] = 3; // AO.agu2['c'] = 3
    }(a,b)

    console.log(JSON.stringify(a),JSON.stringify(b))

这里考的是引用传递没错,所以b输出结果是{"b":2,"c":3} ,但为什么b变了,但a没变呢。大多数同学应该都会跟我一样认为agu1 = agu2 使a的应用指向b,所以会和b结果一样。但如果用AO对象来分析,那么指向b的是AO.agu1,而不是a。所以后续更改跟他没什么关系。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值