一、var a=xxx,a內存中到底保存的是什么?
1.xxx是數據,保存的就是這個數據。
2.xxx是對象,保存的就是這個對象的地址值。
3.xxx是個變量,保存的就是xxx的內容,可能是數據,也可能是地址值。
二、關於引用變量賦值問題。
1.兩(n)個引用變量指向同一對象,通過其中一個引用變量修改對象內部數據,其他引用變量看到的是修改之后的數據。
1 var obj1={name:'yao'}; 2 var obj2=obj1; 3 obj2.name='li'; 4 console.log(obj1.age);//'li'
2.兩(n)個引用變量指向同一對象,讓其中一個引用變量指向另一個對象,其他引用變量還是指向之前的對象。
1 var obj1={name:'yao'}; 2 var obj2=obj1; 3 obj1={name:'li'}; 4 console.log(obj2.name);//'yao'
三、js調用函數傳遞變量參數時,是值傳遞還是引用傳遞?
所有函數的參數都是按值傳遞的!!
但是訪問變量有按值和按引用兩種方式!!
1 function setName(obj) { 2 obj.name='yao'; 3 } 4 var person=new Object(); 5 setName(person); 6 console.log(person.name);//'yao'
1 function setName(obj) { 2 obj.name='yao'; 3 obj=new Object(); 4 obj.name='li'; 5 } 6 var person=new Object(); 7 setName(person); 8 console.log(person.name);//'yao'
如果person是按引用傳遞的,那么person會自動被修改為指向其name屬性值為'li'的新對象。但是當訪問person.name時,顯示值仍為‘yao’。這說明即使在函數內部修改了參數的值,但原始的引用仍然保持未變。實際上,當在函數內部重寫obj時,這個變量引用就是一個局部對象了。而這個局部對象會在函數執行完畢后立即被銷毀。