第四章 变量、作用域和内存问题

ECMAScript变量分为两种不同数据类型的值:基本类型值和引用类型值。

基本数据类型:Undefined,Null,Boolean,Number,String,按值访问

引用数据类型:对象,按引用访问

ECMAScript中所有函数的参数都是按照值传递的。也就是说,把函数外部的值复制到函数的内部的参数,就和把值从一个变量复制到另一个变量一样。

function setName(obj){
  obj.name = "zhang";
  obj = new Object();
  obj.name = "greg";
}
var person = new Object();
setName(person);
console.log(person.name);

检测基本类型的方法:typeof;
检测什么类型对象的方法:instance;

基本类型值在内存中占据固定大小的空间,因此被保存在栈空间;
从一个变量向另一个变量复制基本类型的值,会创建这个值得一个副本;
引用类型的值是对象,保存在堆内存中;
包含引用类型值得变量实际上包含的并不是对象本身,而是一个指向给对象的指针;
从一个对象向另一个对象复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象;
确定一个值是那种基本类型用typeof操作符,确定一个值是那种引用类型可以使用instanceof操作符。

“标记清除”是目前主流的垃圾收集算法,思想是给当前不适用的值加上标记,然后在回收其内存。
另一种垃圾收集算法是“引用计数”,这种算法的思想是跟踪记录所有制被引用的次数。JavaScript引擎目前都不在使用这种算法,但在IE中访问非原生JavaScript对象(如DOM元素)时,这种算法仍然会导致问题。
解除变量的引用不仅有助于消除循环引用对象,而且对垃圾收集有好处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容