javascript程序设计案例教程第二版bom(javascript程序设计案例教

http://www.itjxue.com  2023-02-02 03:02  来源:未知  点击次数: 

《JavaScript高级程序设计》第3版与第2版有何差异

第3版全新的内容就有5章,涵盖了全新的HTML5 API,比如历史状态管理、Canvas、离线应用、Web Workers,等等。在全书各章里,我也增加了ECMAScript 5带来的变化,包括严格模式的限制和如何使用新API创建对象。原有内容也都更新了最新浏览器支持信息,包括移动平台浏览器的支持情况(不过,浏览器支持情况永远跟不上变化)。另外,这一版还为ECMAScript Harmony增加了一个附录,以便读者提前了解一下未来的情形。

译者在翻译过程中比对的信息

本书第2版正文22章,另有两个附录。第3版则有25章,4个附录。作者在博客中提到的新增的5章大致应该如下。

第11章:DOM扩展

第15章:使用Canvas绘图

第16章:HTML5脚本编程

第23章:离线应用与客户端存储

第25章:新兴的API

之所以说大致是这5章,主要因为它们跟“HTML5及相关规范”都有联系。而事实上,可以算得上新增的不止这几章,以下几章内容基本上也算是全新的。

第20章:JSON(介绍浏览器对JSON序列化及字符串解析的原生API)

第21章:Ajax与Comet(介绍Ajax及长轮询和HTTP流——Comet)

附录A:ECMAScript Harmony

附录B:严格模式

除此之外,更新内容比较多的还有以下几章——主要区别是ECMAScript 5新增的严格模式下一些基本语法结构的变化及限制,还有新的语言特性(比如新增的数组操作方法、事件类型等)以及DOM3级事件模块相关的更新:

第3章:语言基础

第5章:引用类型

第13章:事件

目前,本书正在翻译中。图灵会在保证质量的前提下,尽量加快本书的出版进度,希望这个体现ECMAScript 5和HTML5规范的新版本早日与中文读者见面。

JavaScript的BOM模型中,有哪些主要对象,各有什么作用?

常用的有

window

window全局变量

.frames[*] 获取框架页

.screenLeft .screenTop 等 窗体大小

.open .moveTo .resizeTo .close等

setTimeout setInterval等

.confirm()信息框

.find() 查找

.print() 打印

location

常用的有href跳转

host hostname

search 返回?后的字符串

protocal port 协议跟端口等 信息

navigator

用户端信息,常常用于检测浏览器类型

.userAgent较常用

screen

top left width height 等标示浏览器窗体大小位置信息

history

.go(-1)返回上一页

.back()后退

.forward()前进

要完整了解推荐看看javascript高级程序设计

javascript频繁创建销毁对象会不会给浏览器造成负担

问题不大,

销毁不掉问题才大,

我以前做过一个项目,每一步每一个按钮都是Ajax性能什么的倒是没发现什么问题全看网速,但是,问题出在:在IE下(其他浏览器没测),每次刷新都会增加几十M内存的占用,多刷新几次内存就提示“虚拟内存不足”什么的,只能关闭浏览器了。就是js对象都没销毁掉。

楼上抄了一段书,我也把我看的发出来吧:

(好多字,没办法,对付看吧,我已经精简过了)

(一般用2种方式:标记清除,引用计数)

以下内容来自《javascript高级程序设计(第二版)》

4.3垃圾收集器:

垃圾收集机制的原理其实很简单:找出那些不再继续使用的变量,然后释放其内存。

4.3.1标记清除:

javascript中最常用的垃圾收集方式是“标记清除”(mark-and-sweep)。当变量进入环境(例如,在函数中声明一个变量)时,就将这个变量标记为“进入环境”。

……

当变量离开环境时。则将其标记为“离开环境”。

垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记。然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记。而在此之后仍然带有标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后垃圾收集器完成“内存清理”工作,销毁那些标记的值并回收他们所占用的内存空间。

4.3.2引用计数:

另一种不太常见的垃圾收集策略叫做“引用计数”(reference counting)。引用计数的含义是跟踪记录每个值被引用的次数。当声明一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数就是1。如果同一个值又被赋给另一个变量,则该引用次数加1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数减1.当这个值的引用次数变成0时,则说明没办法再访问这个值了,因此回收它。

Netscape Navigator 3.0 是最早使用引用计数策略的浏览器,但很快它就遇到了一个严重的问题:循环引用。

function problem(){

var objectA = new Object();

var objectB = new Object();

objectA.someOtherObject = objectB;

objectB.anotherObject = objectA;

}

两种引用的次数都是2。

为此:Netscape在 Navigator 4.0中放弃了引用计数方式,转而采用标记清除来实现垃圾回收。

IE中有一部分并不是原生javascript对象。例如,其BOM和DOM中的对象就是使用C++以COM(Component Object Model,组建对象模型)对象的形式实现的,而COM对象的垃圾收集机制采用的就是引用计数策略。因此,即使IE的javascript引擎是使用标记清除策略来实现的,但javascript访问的COM对象依然是基于引用计数策略的。

……

var element = document.getElementById('some_element');

var myObject = new Object();

myObject.element = element;

element.someObject = myObject;

……

为了避免类似这样的循环引用问题,最好是在不使用它们的时候手工断开原生javascript对象与DOM元素之间的链接。例如,

myObject.element = null;

element.someObject = null;

将变量设置为null意味着切断变量与它此前引用的值之间的链接。当垃圾收集器下次运行时就会删除这些值并回收它们占用的内存。

4.3.3性能问题:

垃圾收集器是周期运行的,而且如果为变量分配的内存数量很客观,那么回收工作量也是相当大的。

……

IE的垃圾收集器是根据内存分配量运行的,具体一点说就是256个变量、4096个对象(或数组)字面量和数组元素(slot)或者64KB的字符串。达到上述任何一个临界值,垃圾收集器就会运行。如果一个脚本中包含那么多变量,那么该脚本可能会在其生命周期中一直保有那么多变量。而这样一来,垃圾收集器就不得不频繁第运行。结果,由此引发的严重性能问题促使IE7重写了其垃圾收集器例程(临界值动态修改,一次回收中如果回收的内存小于15%,临界值就翻倍、如果回收大于85%,临界值就重置为默认值)。

4.3.4管理内存:

确保占用最少的内存可以让页面获得更好的性能。而优化内存占用的最佳方式,就是为执行中的代码只保存必要的数据。一旦数据不在有用,最好通过将其值设置为null来释放其引用——这个做法叫做“解除引用”(dereferencing)

……

不过,解除一个值的引用并不意味着自动回收该值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其回收。

JavaScript的BOM和DOM有什么区别

JavaScript的BOM和DOM的区别如下:

1、BOM和浏览器关系密切,DOM和文档有关,这里的文档指的是网页,也就是HTML文档。

2、BOM是Browser Object Model的缩写,即浏览器对象模型。DOM是Document Object Model的缩写,即文档对象模型。

3、BOM没有相关标准。DOM是W3C的标准。

4、BOM的最根本对象是window。DOM最根本对象是document(实际上是window.document)。

二者之间的关系说明如图:

(责任编辑:IT教学网)

更多

推荐网页文字特效文章