【红宝书】第1章js简介、第2章 在HTML中使用js、第3章.基本概念、第4章.变量、作用域和内存问题

第1章.js简介

JavaScript是一种专为与网页交互而设计的脚本语言,由三部分组成:

1.ECMAScript,提供核心语言功能

2.文档对象模型DOM,提供访问和操作网页内容的方法和接口

3.浏览器对象模型BOM,提供与浏览器交互的方法和接口

 

第2章.在HTML中使用js

<script>元素,有以下属性

async:可选。表示应该立即下载脚本,但不妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。

defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。

src:可选。表示包含要执行代码的外部文件。

type:可选。表示编写代码使用的脚本语言的内容类型(也被成为MIME类型)。默认是text/javascript。实际上,服务器在传送JS文件时使用的MIME类型通常是application/x-javascript,但在type中设置这个值却可能导致脚本被忽略。在非IE中还可以使用以下值:application/javascript和application/ecmascript。考虑到约定俗称和最大限度的浏览器兼容性,目前type属性依旧还是text/javascript。

charset:可选。表示通过src属性指定的代码的代码的字符集。

异步脚本

<script src="example.js" async="async"></script>

并不保证按照指定他们的先后顺序执行。建议异步脚本不要在加载期间修改DOM。

异步脚本一定会在页面的load事件前执行。

支持的有Firefox3.6+、Safari 5和Chrome。

延迟脚本

<script src="example.js" defer="defer"></script>

HTML5规范要求脚本按他们出现的先后顺序执行。建议只包含一个延迟脚本

放置位置

放在页面后面,即主要内容后面,</body>标签前面。

使用方式:1.直接在页面中嵌入JS代码2.包含外部JS文件

使用外部文件的优点

1.可维护性,方便维护

2.可缓存,浏览器能根据具体的设置缓存链接的所有外部JS文件,也就是如果两个页面使用同一个文件那么这个文件只需下载一次,加快页面加载速度

 

文档模式doctype

混杂模式quirks mode,标准模式standards mode。没声明默认开启混杂模式。采用混杂模式不是什么值得推荐的做法,因为不同浏览器在这种模式下的行为差异非常大。

主要影响CSS内容的呈现方式,但在某些情况下也会影响JS的解析。

 

第3章.基本概念

区分大小写

采用驼峰大小写格式

标识符

指变量、函数、属性的名字,或者函数的参数。格式规则:

1.第一个字符必须是一个字母、下划线(_)、或一个美元符号($)

2.其他字符可以是字母、下划线、美元符号和数字

注释

// 单行

/*

多行

*/

严格模式

"use strict"

代码顶部添加或者在函数中添加

变量

松散类型,其可以保存任何类型的数据

数据类型

5种简单(基本)类型:undefined,null,string,number,boolean,symbol(ES6新增)

1种复杂类型:object

typeof操作符

返回结果有

"undefined"--如果这个值未定义

"boolean"--如果这个值是布尔值

"string"--如果这个值是字符串

"number"--如果这个值是数值

"object"--如果这个值是对象或null

"function"--如果这个值是函数

注意:

1.undefined派生自null,所以null==undefined。

2.从逻辑上,null表示空对象指针

3.Boolean(val)方法转换了val

4.Number.MIN_VALUE和Number.MAX_VALUE

5.NaN

 

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

基本类型undefined、null、boolean、string、number 栈内存

引用类型object 堆内存

访问变量有按值和按引用两种方式,函数的参数只能按值传递

instanceof检测类型

 

执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为。每个执行环境都有一个与之关联的变量对象。

全局执行环境、函数执行环境,某个执行环境的代码全部执行完成则环境会被销毁,保存在其中的所有变量和函数定义也会销毁

当代码在一个环境中执行就会创建变量对象的作用域链

作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。

作用域链的前端始终都是当前执行的代码所在环境的变量对象。

 

垃圾收集

1.标记清除(最常用)

当变量进入环境时,就将这个变量标记为进入环境。从逻辑上永远不能释放进入环境的变量所占用的内存。而当变量离开环境时则将其标记为离开环境。

垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记,然后他会去掉环境中的变量以及被环境中的变量引用的变量标记,再次之后再被加上标记的变量将被视为准备删除的变量。最后垃圾收集器完成内存清除工作,销毁那些带标记的值并回收他们所占用的内存空间。

2.引用计数

跟踪记录每个值被引用的次数。但值的引用次数变成0时回收其占用的内存空间。当代码中存在循环引用现象,引用计数算法就会导致问题。

性能问题

垃圾收集器是周期性运行,如果为变量分配的内存数量可观,那么回收工作量也是相当大的。确定垃圾收集的事件间隔就非常重要。

管理内存

js自带垃圾回收机制

分配给Web浏览器的可用内存数量通常比分配给桌面应用程序的少,这样做是出于安全方面的考虑,目的是防止运行JS网页耗尽全部系统内存而导致系统奔溃。内存限制问题不仅会影响给变量分配内存,同时还会影响调用栈以及在一个线程中能够同时执行的语句数量。

因此确保占用最少的内存可以让页面获得更好的性能。因此一旦数据不再使用最好解除引用,即赋值为null来释放引用。

posted @ 2019-12-24 21:33  把我当做一棵树叭  阅读(380)  评论(0)    收藏  举报