基本數據類型詳解
在學習數組引用詳解前,我們先來看基本數據類型的詳解
舉個小例子:
我們聲明一個a = 10;
然後聲明一個函數,這個函數裡面有個參數為a
把這個參數的a改成5,a = 5; 並且再加上alert(a);
函數外我們先去alert(a);
再調用這個函數把a寫在裡面傳進去
再來一次alert(a);
我們來看一下這三次調用的結果
第一次輸出結果為10,第二次是調用的函數輸出的結果為5,第三次輸出的結果還是10
show函數調用的結果只限於這個範圍
說明:
聲明在當前函數中的變量和當前函數的形參,作用域都限制在該函數內
當函數調用結束以後,這些變量和形參可,會被釋放
我們來分解看一下
首先紅框中定義的a=10; 沒有調用函數,並且alert輸出的也是10,這個毫無疑問
在函數中,首先定義函數時,function show(a)這裡面a的值首先被賦值成10;但是我們在函數體內把這個a的值修改為了5;這時的a就為5
函數調用結束,就會被銷毀,我們最後再去alert(a);時,就會找到第一次聲明的a,即為10
這是關於基本數據類型的詳解
數組類型引用詳解
來修改一下上面的小例子:
如果按照基本數據類型的解釋
第一個alert和第三個alert應該是輸出相同的的10,20
中間的show(); 函數調用的是輸出的10,20,30,40
實際運行的結果我們來看一下
首先第一個alert輸出的是10,20沒問題
但是調用函數的alert和最後一個alert輸出的結果是相同的10,20,30,40
這是因為什麼呢?這就是因為數組是一個引用的數據類型
數組:複合數據類型/引用數據類型
注意:函數運行的內存空間是預先分配好的;一旦被分配好內存空間,就不能進行改變了
所有的複合數據類型都不直接存儲在我們的函數中,它是存儲在堆段
在堆段,我們可以想用多少內存,就隨時分配多少內存;
但是在函數中是預先分配好的,不能修改
在我們上面例子中,一開始聲明的數組10和20並不是存在一個變量中,而是存在堆段中
一個變量是存不下這些數的,更何況我們還要繼續往數組中增加數值
10和20在我們內存中是需要佔空間的,我們打個比方來說,10和20就相當於在住賓館,住賓館肯定要有房間號吧,當我們想要找到它時只需要記住房間號即可;假設10,20的房間號為888,那麼arr只需要記住這個房間號888,最終當我們訪問這個arr時,首先訪問的就是888號,然後才能找到10,20;
所以在第一次輸出的時候是10,20
然後呢我們去執行show函數,show函數中有個形參也叫arr,我們在show的函數體內對arr進行了賦值操作,實際上就是給888號房間賦值,所以函數show的arr賦值後也為888號;然後我們又給888號房間用push增加了兩個數30,40,30,40同樣也存儲在了堆段中。
所以第二次調用的show函數是10,20,30,40
當我們的show函數執行完畢後,show函數就被釋放掉了,銷毀了;但是當我們最後一個alert再去訪問arr時,arr的房間號888所對應的堆段中已經是10,20,30,40了
所以第三次alert所輸出的函數也是10,20,30,40
我們要記住,所有的複合數據類型所存儲的方式都是一個門牌號,也就是地址,再通過地址去訪問數據
即,這類型的數據我們叫做引用數據類型
理解了引用的概念後,我們就可以給冒泡排序和選擇排序就可以對他進行封裝函數
封裝排序方法
利用排序中的例子來看
將循環放在函數體內
封裝冒泡排序:
調用函數即可看到相應的排序
由於數組是引用數據類型,所以我們不需要return返回值
因為我們通過這種方式修改的數組就是原來的數組
封裝選擇排序:
將這兩個排序寫在一個新的js文件中
我們想要用到這兩個排序算法的時候就可以直接引用這個兩個函數bubble()和choose()
直接調用函數就ok
- End -
---web分享,分享的不只是web