第183天:引用類型和值類型
阿新 • • 發佈:2018-03-03
內存 span 屬於 func 進行 修改 引用 OS turn
一、內存分配
1、數值型內存分配
1 <script> 2 var num1; //這個時候不進行內存分配 3 var num3=9;//分配內存 4 var num4=num3;//會不會分配 5 6 // 這裏到底分配還是不分配內存?? 7 // 答案 --分配內存 彼此擁有獨立的內存空間,互不影響 8 console.log(num3); 9 console.log(num4); 10 11 num3=3333333; 12 num4=4444444; 13 console.log(num3);14 console.log(num4); //當更改數據,值不一樣的本質是這裏分配兩個空間獨立存儲 15 16 17 </script>
2、字符串內存分配
1 <script> 2 //字符串 3 var str1; //這個時候不進行內存分配 4 var str2 = ‘樂樂‘; //分配內存 5 var str3=str2; //問題,這裏str3 會不會分配內存?? 6 7 //答案:會 8 console.log(str1); 9 console.log(str2); 10 console.log(str3);11 console.log(str2===str3); //比較的是指針指向的內存空間中存儲的值 12 13 str2 =‘lalala222222222‘; 14 str3 =‘lalala333333333‘; 15 console.log(str2);//lalala222222222 16 console.log(str3);//lalala333333333 17 </script>
3、數組內存分配
1 <script> 2 // 數組 : 當定義一個新數組, 3 // 內存會產生兩片區域,一個存儲變量,一個存儲數組 變量中保存的只是數組所在的地址4 var arr1=[‘樂樂‘,‘淘淘‘];//分配內存 5 //引用類型其實是指向同一個地址,也就是操縱的其實是同一個位置 6 var arr2=arr1; //問題:這裏arr2會不會分配內存 7 console.log(arr1[0]);//樂樂 8 console.log(arr2[0]); //樂樂 一樣 9 10 11 //修改數組1 12 arr2[0]=‘水滸傳 西遊記 三國演義 紅樓夢‘; 13 console.log(arr1[0]);//水滸傳 西遊記 三國演義 紅樓夢 14 console.log(arr2[0]);//水滸傳 西遊記 三國演義 紅樓夢 15 16 //一樣 說明這裏不分配內存,其實arr2變量中存的是地址,指向arr1內存 17 18 </script>
4、函數內存分配
1 <script> 2 3 // 系統都會在內存中生成兩個區域:一個存儲變量,一個用來存儲函數 4 // 而變量中存放的只是函數空間所在的地址(指針) 5 // 由於函數是對象,因此函數名實際上也是一個指向函數對象的指針,不會與某個函數綁定。 6 //由於函數名僅僅是指向函數的指針, 7 //因此函數名與包含對象指針的其他變量沒有什麽不同。 8 //換句話說,一個函數可能會有多個名字,例如: 9 function sum(num1,num2) 10 { 11 return num1 + num2; 12 } 13 console.log(sum(10,10)); //20 14 15 var anotherSum = sum; 16 17 //內存是如何分配的? 這裏不會在內存生成新的空間,存儲函數,而是生成一個變量,變量中保存的是同一個地址 18 sum = null;//這裏只是將sum變量中原來保存的是函數地址,然後賦值成null,這樣做並不會影響到函數對象對應的內存空間 19 console.log(anotherSum(10,10)); //20 20 console.log(sum(10,10)); //20 21 22 </script>
二、引用類型和值類型總結
1 <script> 2 function show(x) { 3 console.log(typeof(x)); // undefined 值類型 4 console.log(typeof(10)); // number 值類型 5 console.log(typeof(‘abc‘)); // string 值類型 6 console.log(typeof(true)); // boolean 值類型 7 console.log(typeof(function () { })); //function 函數 引用類型 8 console.log(typeof([1, ‘a‘, true])); //object 數組 引用類型 9 console.log(typeof ({ a: 10, b: 20 })); //object 或者json 引用類型 10 console.log(typeof (null)); //object null 引用類型 11 console.log(typeof (new Number(10))); //object 內置對象 引用類型 12 } 13 show(); 14 // 其中上面的四種(undefined, number, string, boolean)屬於值類型,不是對象。 15 // 函數、數組、對象、null、new Number(10)都是對象。他們都是引用類型。 16 17 var test ={name:‘lele‘}; 18 var test2= test; 19 console.log(test === test2);//true 20 test.name=‘lala‘; 21 console.log(test2.name);//lala 22 23 </script>
第183天:引用類型和值類型