js中的引用类型做为函数参数的理解

这里讲的是引用类型做为函数参数传递的例子。函数

function setName(obj) {
    obj.name = 'aaa';
    var obj = new Object();//若是是按引用传递的,此处传参进来obj应该被从新引用新的内存单元
    obj.name = 'ccc';
    return obj;
}
var person = new Object();
person.name = 'bbb';
var newPerson = setName(person);
console.log(person.name + ' | ' + newPerson.name); // aaa | ccc
复制代码

1.根据引用类型复制变量复制的是指针,按高级教程指南原书说法叫作referencespa

2.引用类型做为参数进入函数,按原书说法就是将引用类型复制给函数的argument,而后做者就开始给了两个例子来讲明引用类型做为参数是value传递而不是reference传递(ps.中英版都研读通常之后我仍是蒙逼)指针

3.引用类型复制是reference,即复制的是内存区域的指针,能够理解形参obj首先由argument[0]赋值,即obj = argument[0]。当person进到函数的过程第一步就是argument[0] = person,即person的指针给了argument[0]。(其实能够理解为利用第三个变量argument保存引用)code

4.当obj.name ='aaa';因为argument[0]指针是person,而obj = argument[0],因此obj也就是指向person。因此person.name=‘aaa’对象

5.obj = new Object();建立一个新对象并他的指针复制给变量obj,此时obj的指针再也不指向person了。而person的指针是不会受到影响的,因此最终person.name ='aaa'教程

6.高级教程指南原书前文也提过基本类型值变量的复制是从新分配内存空间,引用类型变量因为没法直接访问堆内存中的对象因此它实际的值是内存地址即指针,经过指针来操做js对象,引用类型的复制就是复制指针,因此这两种变量在内存中的存储方式根本不同嘛,值传递和引用传递不就是为了区分这两种不一样的存储方式吗,那么怎么在函数传参(实际不就是给将变量值复制给argument)又能同一了呢,逻辑上就说不通啊内存

7.综上所述个人理解是引用类型在函数传参上仍是reference传递io

相关文章
相关标签/搜索