美文网首页深究JavaScript
js中当对象作为参数传递?

js中当对象作为参数传递?

作者: 景元合 | 来源:发表于2020-01-31 13:05 被阅读0次

    前沿

    今天在写深拷贝时候,发现传递参数为对象时候,函数内修改参数,对应的对象也会跟着被修改,于是特意研究了一下参数为对象时候的机制。

    案例一

    let person={
        name:'zhangsan'
    };
    function setName(obj){
        obj.name='lisi'
    }
    setName(person);
    console.log(person.name);//lisi
    

    案例二

    let person={
        name:'zhangsan'
    };
    function setName(obj){
        obj={
            name:'lisi'
        }
    }
    setName(person);
    console.log(person.name);//zhangsan
    

    案例一中把person传给setName,其实是把person的拷贝传递给obj,传递的是地址,此时obj与person公用一个内存地址,所以修改obj的name,person的name也会改变。
    案例二中同样把person传给obj,obj新创建一个对象,测试obj与person是2个不同的对象,指向不同地址。因此修改obj,person不会改变。

    为什么说‘ECMAScript 中所有函数的参数都是按值传递’。

    基本类型就不说了。
    对于引用类型,参数的传递是传递对象的引用副本。相当于传递了一份拷贝之后的新地址,这拷贝地址其实也可以理解为按值传递(也叫共享传递)了。

    相关文章

      网友评论

        本文标题:js中当对象作为参数传递?

        本文链接:https://www.haomeiwen.com/subject/uodgthtx.html