4.1 基本类型和引用类型的值

            1.基本类型的值是(简单的数据段),引用类型的值是(保存在内存中的对象)。

基本类型的值在内存中占据固定大小的空间,因此被保存在栈中。(lifo)(后进先出的数据结构)

引用类型的值保存在堆(先进先出的数据结构)中。引用存放在栈中。

2.为对象添加属性时,操作的是实际对象;复制保存时操作的 是对象引用。

3.复制变量值:①基本数据类型

var num1 = 5;
var num2 = num1; //num1与num2是完全独立的

②引用类型,复制是实际上是引用。复制结束以后,2个变量引用同一个对象。

4.当在函数内部重写 对象时,对象就变成了一个局部对象。该对象在函数执行完成以后即销毁。

         function setName(obj) {
obj.name = "zds";
obj = new Object(); //重写
obj.name = "hhh";
}
var b = new Object();
setName(b);
console.log(b.name); //zds

ECMAScript 所有函数的参数都是按值传递的。(引用类型也是按值传递。上例中,对象在增加属性,操作的就是实际对象)

5.检测类型:①检测基本数据 ----typeof

②检测引用类型的数据 - instanceof

4.2 执行环境及作用域

1.①每个执行环境(每块土地)都有一个与之关联的变量对象(地主),环境中定义的变量和函数(农民和农具)都保存在这个对象中。

②web浏览器中,全局执行环境被认为是window对象。

③执行环境被销毁,保存在其中的变量和函数也随之销毁(全局环境直到应用程序退出时(例如:关闭网页或者浏览器时)才被销毁)

2.内部环境可以通过作用域链访问所有的外部环境。

3.执行环境分为,全局执行环境和函数执行环境。每进入一个新的执行环境,都会创建一个用于搜索变量和函数的作用域链;

4.3 垃圾收集

1.js具有自动垃圾收集机制。这种机制的原理是:找出那些不再继续使用的变量,然后释放其占用的内存。为此,垃圾收集器会按照固定的时间间隔周期性地执行这一操作。

2.方法:①标记清除 ②引用计数

“标记清除"是目前主流的垃圾收集算法,这种算法的思想是:给当前不使用的值加上标记,然后再回收其内存

“引用计数”是跟踪记录所有值被引用的次数。目前不推荐这种。

③引用计数会遇到循环引用的问题:

var a = new Object();
var b = new Object();
a.name = b;
b.name = a;

a和b的引用次数永远都是2。

④ie的js引擎(trident)是使用标记清除策略实现的。而非原生js对象是基于计数策略的。

4.分配给web浏览器的内存数量要比分配给桌面应用程序少。是为了安全方面的考虑,目的是为了防止js的网页耗尽全部系统内存而导致系统崩溃。

因此确保占用最少的内存可以让页面获得更好的性能。而优化内存最佳方式,就是为执行中的代码只保存必要的数据,一旦数据不再引用,最好通过将其设置为null来释放其引用。----即”解除引用“

var a = {name:“zds”};

a = null';

解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其收回。

最新文章

  1. vim - save current file with a new name but keep editing current file
  2. 奇 arch/i386/kernel/head.o(.text+0x3e): undefined reference to `stack_start'
  3. 常用JQ特效代码
  4. Asp.net Mvc4默认权限详细(下)
  5. panels能否包含views_block ////// panels -- content pane 参数传递
  6. SQLite入门与分析(二)---设计与概念(续)
  7. 到目前为止,Linux下最完整的Samba服务器配置攻略
  8. EL表达式读取数据(在Map,javaBean,List)
  9. Java基础知识强化之IO流笔记08:异常的注意事项
  10. JAVA 操作 DBF 文件数据库
  11. WebIM(1)
  12. ad_封装_ads828
  13. Java自学手记——注解
  14. python读取外部文件
  15. CDOJ 1330 柱爷与远古法阵【高斯消元,卡精度】
  16. 解决Apache配置虚拟主机时出现403错误的问题
  17. 第二期,问道PC端游戏免安装,下载即可体验
  18. 125、Android样式的开发(转载)
  19. run
  20. 使用css实现移动端导航条滚动

热门文章

  1. -webkit-overflow-scrolling:touch介绍和碰到的坑
  2. linux相关(find/grep/awk/sed/rpm)
  3. IntelliJ IDEA 创建spring boot 的Hello World 项目
  4. Spark 计算人员三度关系
  5. 基于socket 实现单线程并发
  6. pg_dump - 将一个PostgreSQL数据库抽出到一个脚本文件或者其它归档文件中
  7. ubuntu18.04 设置环境变量
  8. Codeforces917E
  9. alert(1) to win 11
  10. alert(1) to win 6