JS變數分析

月__發表於2019-05-24

JavaScript 變數是儲存資料值的容器。

  • JS中的變數是鬆散型別的,可以儲存任何型別的資料。

  • JS變數鬆散型別的本質,決定了變數只是在特定時間用於儲存特定值的一個名字而已。 由於不存在定義某個變數必須要儲存何種資料型別值的規則,變數的值及其資料型別可以在指令碼的生命週期內改變。

    用var關鍵字宣告的變數,未經初始化時,儲存的是一個特殊的值——undefined。

  • 變數初始化僅僅是給變數賦一個值。

  • 可以在一條語句中宣告多個變數,初始化或不初始化皆可,變數之間用逗號隔開。

  • 使用更具語義的變數名,讓程式碼的可讀性更強。

  • 用var關鍵字宣告的變數是定義該變數的作用域中的區域性變數。

  • 當使用var關鍵字宣告瞭一個變數時,建立的這個變數是不可配置的,也就是說這個變數無法通過delete運算子刪除。

var num1 = 10;
2 (function num() {
3     var num2 = 10;
4     delete num2;
5     console.log(num2);    //10
6 })();  
7 delete num1;    
8 console.log(num1);
複製程式碼

基本型別值與引用型別值

JS中的變數可以儲存兩種不同型別的值:基本型別值和引用型別值。

在將一個值賦給變數時,解析器必須確定這個值是基本型別值還是引用型別值。

  • 基本資料型別:Number、String、Boolean、Null、Undefiend;這5種基本資料型別是按值訪問的,因為可以操作儲存在變數中的實際的值。

  • 對於基本型別值,在複製變數的時候,會在新的變數上建立一個新值,這個新值是原值的一個副本,它們相互獨立。

  • 基本型別值之間的比較,只是單純的值的比較。

  • 引用型別值是儲存在變數中的物件;引用型別值就是指物件。

  • 儲存引用型別值的變數,實際上儲存的是一個指向該物件的指標。

  • 當複製儲存著物件的某個變數時,複製的其實是指標;複製操作結束後,兩個變數指向同一個物件。

  • 對於引用型別值,可以為其新增屬性和方法,也可以修改或者刪除其屬性和方法。

  • 在為物件新增屬性和方法時,操作的是實際的物件,因此,改變任何一個變數,都會影響另外一個變數。

JS變數分析
進行分析,上面的結果如下:

JS變數分析
總結: Var a = 10; var b = a; 上面的程式碼可以這樣理解:將a對應的記憶體中的值取出來複製了一份,給了b。此時b就是10。

此時a和b這兩個記憶體空間是獨立的,對一個記憶體空間值的改變不會影響另一個內容空間。

變數的宣告、定義與初始化

宣告——給變數一個名字,宣告它從此刻開始存在;

定義——給變數分配一個儲存空間;

初始化——給變數的儲存空間賦值。

在JS中,就是這樣子:

1 var x;    //宣告——變數x從現在開始存在;
2 x = "hello";    //(定義並)初始化。
複製程式碼

由於JS是一種動態語言,其變數的型別是不固定的,可以隨著儲存值的變化而變化,所以其定義變得無關緊要。

變數的提升

  • 普通的var變數,肯定要提升

JS變數分析

  • 迴圈內部中的var變數,也會提升

JS變數分析

  • 在函式中的var變數,也是可以提升的

JS變數分析
注意:在函式中的變數的提升,並不是提升到了程式碼段的第一行,而是提升到了函式內部的第一行。

相關文章