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

相關文章
相關標籤/搜索