一、内存分配
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>