1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Javascript中堆和棧的簡單理解</title> 6 </head> 7 <body> 8 9 <script type="text/javascript"> 10 /*function abc(num) { 11 if(num > 3) { 12 abc(--num); 13 } 14 document.writeln(num); 15 } 16 abc(5);*/ 17 //1.上面的打印結果爲:3,3,4,注意理解。 18 19 20 /** 21 * 在計算機領域,堆棧是一個不容忽視的概念,可是不少人甚至是計算機專業的人也沒有明確堆棧實際上是兩種數據結構。堆棧都是一種數據項按序排列的數據結構,只能在一端(稱爲棧頂(top))對數據項進行插入和刪除。要點:堆,順序隨意。棧,後進先出(Last-In/First-Out)。 22 * 23 * 24 * 25 * 對比 26 棧(操做系統):由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操做方式相似於數據結構中的棧 27 棧使用的是一級緩存, 他們一般都是被調用時處於存儲空間中,調用完畢當即釋放 28 堆(操做系統): 通常由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式卻是相似於鏈表。 29 堆則是存放在二級緩存中,生命週期由虛擬機的垃圾回收算法來決定(並非一旦成爲孤兒對象就能被回收)。因此調用這些對象的速度要相對來得低一些 30 堆(數據結構):堆能夠被當作是一棵樹,如:堆排序 31 棧(數據結構):一種後進先出的數據結構 32 */ 33 34 //2. 35 /*var myValue1 = 900; 36 function test1(value1) { 37 value1 = 90; 38 } 39 test1(myValue1); 40 alert(myValue1); */ 41 //此時彈出的值還爲900,緣由:test1(myValue1) → test1(900) ,傳入的不是一個棧地址 42 //3. 43 var myArray1 = [45,90,180]; 44 function test2(value2) { 45 value2[0] = 20; 46 } 47 test2(myArray1); 48 alert(myArray1); 49 //結果:20,90,180,緣由:test2(myArray1) → test2(地址) 50 51 52 </script> 53 </body> 54 </html>