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


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM