1. 程式人生 > >js中關於賦值和內存的問題

js中關於賦值和內存的問題

傳遞 其中 兩種 3.x function 分享 按引用傳遞 pre .com

一、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時,這個變量引用就是一個局部對象了。而這個局部對象會在函數執行完畢後立即被銷毀。

js中關於賦值和內存的問題