JS的变量存储

js中数据类型包括原始类型和引用类型,其中原始类型(primitives types):undefined,null,boolean,number,string,Symbol(ES6新增);引用类型:Object类型。

1. 原始类型变量存储

原始类型的变量存放在栈中,且是不可变的。例如:

var a = 10;

var b = a;

a = 20;

那么栈内存的变化如下:

对于不可变性,如进行操作:var a = 'str'; a.toUpperCase(); console.log(a); 变量a保持不变,依然为'str'。

2. 引用类型变量存储

引用类型变量存储在堆中,变量在栈中保存堆的引用地址。例如:

var obj = {name:'str'};

var obj1 = obj;

obj.name = 'str1';

console.log(obj1.name); //输出'str1'

内存的变化如下:

所以引用类型变量保存的是堆中的地址,一个对象改变导致另一个对象也跟着改变。

另外,变量在传参时也是按照原始类型传值,引用类型传引用地址的方式传递参数。

var o = {name:'str'};

function fn(obj){

  obj.name = 'str1';

}

fn(o);

console.log(o.name);   //输出‘str1’

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容