前端进阶|第八天 京东笔试题,引用传参赋值无效?

       function changeObjProperty(o) {
            o.siteUrl = "http://www.baidu.com"
            o = new Object()
            o.siteUrl = "http://www.google.com"
        }
        let webSite = new Object();
        changeObjProperty(webSite);
        console.log(webSite.siteUrl);

打印结果是 http://www.baidu.com
website明明是把参数地址传进了changeObjProperty,为什么函数里面对website的值修改,没有生效呢?
问题出在 o = new Object(),这个方法的作用就是将o的地址指向了新的地址,那么对o的操作将与website无关。
为了证实我们的猜想,把代码稍作修改。

 function changeObjProperty(o) {
            o.siteUrl = "http://www.baidu.com"
            o.name="百度"
            o = new Object()
            o.siteUrl = "http://www.google.com"
            o.name="谷歌"
        }
        let webSite = new Object();
        webSite.siteUrl="http://www.jd.com"
        webSite.name="京东"
        changeObjProperty(webSite);
        console.log(webSite.siteUrl);
        console.log(webSite.name);
image.png

我们可以看到,在o重新赋值之前,对参数的修改是生效的,这也就证明,这个第一次未生效并非是指传递造成的。而在o被重新初始化之后,地址已经指向新的对象,修改并不会返回。

所以注意一点,js中new Object会重新生成对象,而不会覆盖,对新对象的操作将与原对象无关。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,876评论 1 32
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 5,052评论 0 2
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,156评论 0 3
  • 认知与意欲的初次见面 亲爱的,从小到大我都活在你坚强的躯壳里,你是我的载体,你长得还算规矩,也有一副讨人喜欢的模样...
    夏安安阅读 3,130评论 2 1
  • 第一节 数学智能 比较多少 爱丽丝老师:小朋友们看~爱丽丝请小朋友请来了两位新朋友,一位是大象,一位是小白兔。今天...
    RYB红黄蓝骆骆阅读 2,880评论 0 0

友情链接更多精彩内容