JavaScript中变量的存储方式(JavaScript中的变量在内存中的具体存储形式)

网友投稿 297 2022-06-13


基本原理

前面文章提到过,在js中变量包括5中基本类型以及一个复杂数据类型Object,当然常用的函数和数组都是对象。对于基本类型和复杂类型,对应着两种不同的存储方式–栈存储和堆存储。为什么要实现两种存储方式的理由很简单,就是基本类型一旦初始化则内存大小固定,访问变量就是访问变量的内存上实际的数据,称之为按值访问。而对象类型说不定什么时候就会增加自身的大小,内存大小不固定。比如动态添加对象的属性、动态增加数组的大小等等都会使变量大小增加,无法在栈中维护。所以js就把对象类型的变量放到堆中,让解释器为其按需分配内存,而通过对象的引用指针对其进行访问,因为对象在堆中的内存地址大小是固定的,因此可以将内存地址保存在栈内存的引用中。这种方式称之为按引用访问。 嗯,理解这一点很重要,在以后的编程中可以避免很多问题。 我们来看下如下的代码:

var a = 'I am a string.'; //a,b,c的变量中保存的都是实际的值,因为他们是基本类型的变量

var b = 1010;

var c = false;

var d = a; //d中保存着和“a值一样的副本,它们互不影响”

a = 'I am different from d';

alert(d); //输出'I am a string'

以上代码很好理解,就是说按值访问的变量复制“你的就是你的,我的就是我的,咱们都有副本,互不影响。”而对于按引用访问则稍有不同:

var e = {

name : 'I am an object',

setName : function(name){

this.name = name;

}

};

var f = e; //赋值操作,实际上的结果是e,f都是指向那个对象的引用指针

f.setName('I am different from e,I am object f.');

alert(e.name); //对f进行操作,e的值也改变了!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:利用响应式技术构建大规模社区网站
下一篇:js去掉字符串前后空格的五种方法(js 清除字符串前后的空格)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~