JavaScript高级程序设计(第3版) 第四章(变量、作用域和内存问题)
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';
解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其收回。
JavaScript高级程序设计(第3版) 第四章(变量、作用域和内存问题)的更多相关文章
- javascript高级程序设计第3版——第4章 变量作用域以及内存
- 《JavaScript高级程序设计》读书笔记(四)变量、作用域和内存问题
内容---理解基本类型和引用类型的值---理解执行环境---理解垃圾收集 --JavaScript变量松散类型的本质--决定了它只是在特定时间用于保存特定值的一个名字而已--变量的值及其数据类型可以在 ...
- javascript高级程序设计第3版——第10章 DOM
第十章,DOM DOM是语言中立的API,用于访问和操作HTML 和XML 文档.DOM1 级将HTML 和XML 文档形象地看作一个层次化的节点树,可以使用JavaScript 来操作这个节点树,进 ...
- javascript高级程序设计第3版——第6章 面向对象的程序设计
第六章——面向对象的程序设计 这一章主要讲述了:面向对象的语言由于没有类/接口情况下工作的几种模式以及面向对象语言的继承: 模式:工厂模式,构造函数模式,原型模式 继承:原型式继承,寄生式继承,以及寄 ...
- JavaScript高级程序设计学习笔记第十四章--表单
1.在 HTML 中,表单是由<form>元素来表示的,而在 JavaScript 中,表单对应的则是 HTMLFormElement 类型. HTMLFormElement 继承了 HT ...
- 读Javascript高级程序设计第三版第六章面向对象设计--创建对象
虽然Object构造函数或者对象字面量都可以用来创建单个对象,但是缺点非常明显:使用同一接口创建很多对象,会产生大量重复代码. 工厂模式 1 function CreatePerson(name,a ...
- javascript高级程序设计第3版——第12章 DOM2与DOM3
12章——DOM2与DOM3 为了增强D0M1,DOM级规范定义了一些模块. DOM2核心:为不同的DOM类型引入了一些与XML命名空间有关的方法,还定义了以编程方式创建Document实例的方法: ...
- javascript高级程序设计第3版——第1Java章 DOM扩展
虽然DOM 为与XML 及HTML 文档交互制定了一系列核心API,但仍然有几个规范对标准的DOM进行了扩展.这些扩展中有很多原来是浏览器专有的,但后来成为了事实标准,于是其他浏览器也都提供了相同的实 ...
- javascript高级程序设计第3版——第8章 BOM(浏览器对象模型)
第八章,浏览器对象模型 主要介绍了window的几个对象以及框架,窗口的关系,各个浏览器对象的属性以及方法:
- javascript高级程序设计第3版——第7章 函数表达式
此张内容的难点在于闭包.而闭包又涉及到原型,原型链,执行上下环境,this的取值等知识点.(此章节对于闭包的内容篇幅较少,且写的很是艰涩难懂,推荐一位大牛的博客,对于闭包的前因后果以及作用机制写的很明 ...
随机推荐
- 电路维修 (广搜变形-双端队列bfs)
# 2632. 「BalticOI 2011 Day1」打开灯泡 Switch the Lamp On [题目描述] 有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会 ...
- go中string类型转换为基本数据类型的方法
代码 // string类型转基本数据类型 package main import ( "fmt" "strconv" ) func main() { str1 ...
- etc/pass命令列表
用户 密码 用户UID 用户组GID 备注 home目录位置 默认shell root x 0 0 root /root /bin/bash daemon x 1 1 daemon /usr/sbin ...
- NLP 自然语言处理之综述
(1) NLP 介绍 NLP 是什么? NLP (Natural Language Processing) 自然语言处理,是计算机科学.人工智能和语言学的交叉学科,目的是让计算机处理或"理解 ...
- Nginx安装与配置-Centos7
Nginx是一款高性能免费开源网页服务器,也可用于反向代理和负载均衡服务器.该软件由伊戈尔·赛索耶夫于2004年发布,2019年3月11日,Nginx被F5 Networks以6.7亿美元收购.201 ...
- nginx+flask+gevent+uwsgi实现websocket
Websocket简介 WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务 ...
- [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
Problems meet in the project: [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序((IM002) [Microso ...
- [web 安全] php随机数安全问题
and() 和 mt_rand() 产生随机数srand() 和 mt_srand() 播种随机数种子(seed)使用: <?php srand(123);//播种随机数种子 for($i=0; ...
- 一篇文章理解JS数据类型、深拷贝和浅拷贝
前言 笔者最近整理了一些前端技术文章,如果有兴趣可以参考这里:muwoo blogs.接下来我们进入正片: js 数据类型 六种 基本数据类型: Boolean. 布尔值,true 和 false. ...
- jmeter性能工具 使用手册(一)
前置条件: 在jmeter官网下载jmter 安装包 电脑有java 环境 使用步骤: 打开jmeter 2.新建线程 Test plan--->add-->theads(users)-- ...