天天看點

《JavaScript核心概念及實踐》——2.2 變量

本節書摘來自異步社群《javascript核心概念及實踐》一書中的第2章,第2.2節,作者:邱俊濤著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

變量,是對值的存儲空間的引用,通過一個名字将一個值關聯起來,以後通過變量就可以引用到該值,比如:

當我們下一次要引用"hello, wrold"這個串進行某項操作時,我們隻需要使用變量str即可。同樣,我們可以用10num來表示102.345。變量的作用就是将值“存儲”在這個變量上,以友善後續代碼對該值的使用。

2.2.1 基本類型和引用類型

在上一小節,我們介紹了javascript中的資料類型,其中基本類型如數字、布爾值,它們在記憶體中都有固定的大小,我們通過變量來直接通路基本類型的資料。而對于引用類型,如對象、數組和函數,由于它們的大小在原則上是不受任何限制的,故我們通過對其引用的通路來通路它們本身,引用本身是一個位址,即指向真實存儲複雜對象的位置。

基本類型和引用類型的差別是比較明顯的,我們來看幾個例子。

運作結果如下:

這樣的運作結果應該在你的意料之内,沒有什麼特别之處,我們再來看看引用類型的例子,由于數組的長度非固定,可以動态增删,是以數組為引用類型。

引用指向的是位址,也就是說,引用不會指向引用本身,而是指向該引用所對應的實際對象。是以通過修改array指向的數組,則arrayref指向的是同一個對象,是以運作效果如下。

<code>1,2,3,4,5,6</code>

2.2.2 變量的作用域

變量被定義的區域即為其作用域,全局變量具有全局作用域,局部變量,比如聲明在函數内部的變量則具有局部作用域,在函數的外部是不能直接通路的。比如:

應該注意的是,在函數内var關鍵字是必須的,如果使用了變量而沒有寫var關鍵字,則預設的操作是對全局對象的,比如:

由于函數func中使用variable而沒有關鍵字var,則預設是對全局對象variable屬性做的操作(修改variable的值為in),是以此段代碼會列印:

繼續閱讀