首页 > 代码库 > 变量与内存
变量与内存
基本类型和引用类型的值
ECMAScript变量可能包含两种不同的数据类型的值:基本类型值和引用类型值。基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置。而引用类型值则是指那些保存在堆内存中的对象,意思是变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。
将一个值赋给变量时,解析器必须确定这个值是基本类型值,还是引用类型值。基本类型值有以下几种:Undefined、Null、Boolean、Number和String。这些类型在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们通过按值来访问的。
PS:在某些语言中,字符串以对象的形式来表示,因此被认为是引用类型。ECMAScript放弃这一传统。
如果赋值的是引用类型的值,则必须在堆内存中为这个值分配空间。由于这种值的大小不固定,因此不能把它们保存到栈内存中。但内存地址大小的固定的,因此可以将内存地址保存在栈内存中。这样,当查询引用类型的变量时,先从栈中读取内存地址,然后再通过地址找到堆中的值。对于这种,我们把它叫做按引用访问。
//基本类型和引用类型的变量赋值,总之复制的是栈内存里的值 var box="haha"; var box2=box; box="hehe"; alert(box); //haha alert(box2); //hehe var box={ name:"haha" } var box2 = box; box.name="hehe"; alert(box.name); //hehe alert(box2.name); //hehe
传参
//传参,所有函数的参数都是按值传递的,没有按引用传递 function box(num){ num +=10; return num; } var num = 50; alert(box(num));//60 alert(num); //50 //这里传递一个引用类型的参数,但不是按引用传递,z两者不一样 function box(obj){ obj.name="haha"; } var obj = new Object(); box(obj); alert(typeof obj.name); //haha
//数据类型检测 //typeof //instanceof var box = [1,2,3]; alert(box instanceof Array); //是否是数组 var box2 = {}; alert(box2 instanceof Object); //是否是对象 var box3 = /g/; alert(box3 instanceof RegExp); //是否是正则表达式 var box4 = new String(‘Lee‘); alert(box4 instanceof String); //是否是字符串对象
另外注意一下几点:
//没有块级作用域 if(true){ var box = "dang"; } alert(window.box); //在函数里,加var就是局部,不加就是全局,建议初始化时一定加var //向上搜索作用域链 var box = "red"; function get(){ return box; //代表全局box,如果作用域里没有就会向上搜索 } alert(get());
<style>p.MsoNormal { margin: 0pt 0pt 0.0001pt; text-align: justify; font-family: "Times New Roman"; font-size: 10.5pt } p.MsoFooter { margin: 0pt 0pt 0.0001pt; text-align: left; font-family: "Times New Roman"; font-size: 9pt } p.MsoHeader { margin: 0pt 0pt 0.0001pt; text-align: justify; font-family: "Times New Roman"; font-size: 9pt } span.msoIns { text-decoration: underline; color: blue } span.msoDel { text-decoration: line-through; color: red } div.Section0 { }</style>
变量与内存
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。