js的變數可以存放兩種型別,即基本型別和引用型別。
基本型別即:null,number,string,boolean,underfined等
引用型別:array,object,function等
基本型別存放於棧中,而引用型別存放於堆中。
舉個例子:
function result(chinese,english,math){
this.chinese = chinese;
this.english = english;
this.math = math;
var power = 100%;
var people = true;
var goodstr = "you are right";
var obj = new object();
var arrlist = [1,2,3,4,5];
var result= new result("語文","英語","數學");
於是我們就得到如下的記憶體分析圖:
從上面我們可以看出power,people,goodstr為基本資料型別;他們的值直接就是放在棧中的,而引用型別:obj,arrlist,result,它們引用變數是存放在棧中的,但是它們卻是指向堆中的的實際物件。那引用型別為什麼要這樣子呢?我們從分析圖當中也能看到,我們是沒有辦法直接去操作堆中的資料的,但是我們可以通過棧中,對堆的物件進行引用從而實現對堆中的資料進行操作。
那基本資料型別和引用型別為什麼要這樣存放呢?那是因為棧比堆的執行速度要快得多,而堆比棧的儲存量要大得多。在棧中儲存的是相對簡單的資料型別,它們是相對比較穩定的,所占用的記憶體也比較的少。而在堆中查詢實際物件的時候是乙個比較費時間的過程。
總體而言,我們要學好js,從它的儲存機制去了解對我們是很有幫助的。
記憶體分配理解
字串常量,放在哪個儲存區呢?是 自動儲存區 還是 靜態儲存區 中?比如 char pstr hello world 這裡,hello world 是乙個字串常量,pstr是在棧中的變數。我想問,字串常量,在哪個記憶體區域分配空間呢?好像應該不是在 棧區 分配空間吧!一 預備知識 程式的記憶體分配 乙...
C語言記憶體分配 通俗理解
最近很多同學希望了解c語言的記憶體分配,雖然可以在網際網路上找到諸多的講解,但是你會發現要麼不通俗易懂,要麼不算太全面。而這些對於新手而言,又絕對會把你弄得暈頭轉向的,所以在此對網上和書本上的諸般講解,進行了通俗的翻譯和總結。在說記憶體分配之前,先提一點題外話,因為在和同學們講解記憶體分配的時候,他...
記憶體分配失敗錯誤處理
一 c語言中的malloc calloc realloc valloc alloca memalign函式 這樣的記憶體分配函式在記憶體分配失敗時都返回空指標,因此,在呼叫返回時,檢查返回值的方法比較簡單,只需要與空指標比較即可 如 char p char malloc 1204 if p null...