js 變量以及函數傳參


一、變量:

  • 基本類型是變量對象重新創建一個新值給變量對象空間,雖然是同一個值但是互不影響。
  • 引用類型是也是將一個值重新賦值給新的變量空間,但是這個值是堆中對象的一個指針,新的變量和舊的變量指向是同一個對象。

如下:

  • 基本類型
1     let num=1;
2     let num1=num;
3     num=num+2;
4     console.log(num,num1);

輸出:

  • 引用類型
1     let obj={};
2     let obj1=obj;
3     obj.name='tom';
4     console.log(obj,obj1);

輸出:

總結:

  1. 基本類型在賦值新的變量的時候,是重新創建一個值給新的變量空間,舊的變量和新的變量互不影響。
  2. 引用類型的,在賦值新的變量,是將對象在堆中的內存指針賦值給新的變量空間,在改變一個變量的屬性,直接影響另一個變量,也就是說他們指向的是同一個對象。

二、函數傳參

無論是基本類型還是引用類型在函數傳參都是按值傳參。

也許大家都會有疑惑為什么變量要基本類型和引用類型 一個按值 一個按引用?

  • 基本類型=>和變量賦值一樣,將一個值傳遞函數的形參(局部變量),在函數內調用該變量,並改變並不會影響函數外的變量。因為這2個是不同的值互不影響。
1     test=(num)=>{
2         num+=1;
3         console.log(num);
4     };
5     let testVal=2;
6     test(testVal);
7     console.log(testVal);//2

 

  • 引用類型,傳遞的是對象在堆中的內存地址值,而不是引用!!
1    testObj=(obj)=>{
2         obj=new Object();
3         obj.name='evil';
4         console.log(obj.name);
5     };
6     let  testMyObj={name:'jack'};
7     testObj(testMyObj);
8     console.log(testMyObj.name);//jack

 

引用類型傳遞是對象的內存地址,而不是引用,如果是引用那么在函數testObj 在函數作用域中的局部變量obj在改變引用的時候,函數外層的testMyObj輸出的name值應該是evil,而不是jack 所以顯然傳遞的值即對象在堆中的內存地址。

 


免責聲明!

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



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