1、在 javascript 中数据类型能够分为两类:javascript
2、声明变量时不一样的内存分配java
3、不一样的内存分配机制也带来了不一样的访问机制函数
在javascript中是不容许直接访问保存在“堆”内存中的对象的,因此在访问一个对象时,首先获得的是这个对象在堆内存中的地址,而后再按照这个地址去得到这个对象中的值,这就是传说中的按引用访问。而原始类型的值则是能够直接访问到的。性能
一、复制变量时的不一样spa
2.参数传递的不一样指针
首先咱们应该明确一点:ECMAScript中全部函数的参数都是按值来传递的。可是为何涉及到原始类型与引用类型的值时仍然有区别呢,还不就是由于内存分配时的差异。 (这个复制变量时遵循的机制彻底同样)code
因此,若是是按引用传递的话,是把第二格中的内容(也就是变量自己)整个传递进去(就不会有第四格的存在了)。但事实是变量把它里面的值传递(复制)给了参数,让这个参数也指向原对象。所以若是在函数内部给这个参数赋值另外一个对象时,这个参数就会更改它的值为新对象的内存地址指向新的对象,但此时原来的变量仍然指向原来的对象,这时候他们是相互独立的;但若是这个参数是改变对象内部的属性的话,这个改变会体如今外部,由于他们共同指向的这个对象被修改了呀!来看下面这个例子吧:(传说中的call by sharing)对象
var obj1 = { value:'花点时间1' }; var obj2 = { value:'花点时间2' }; function changeStuff(obj){ obj.value = '花点时间3'; obj = obj2; return obj.value; } var foo = changeStuff(obj1); console.log(foo);// '花点时间2' 参数obj指向了新的对象obj2 console.log(obj1.value);//'花点时间3',形参obj和对象obj1指向了共同的内存地址,obj改变后,堆(heap)内存中的对象改变,所以obj1的值也发生了改变。