- JavaScript是一种专为与网页交互而设计的脚本语言,由三部分组成
- ECMAScript,提供核心语言功能
- 文档对象模型(DOM),提供访问和操作网页内容的方法和接口
- 浏览器对象模型(BOM),提供与浏览器交互的方法和接口
- sciprt标签
<script async charset defer src type="text/script"></script>
async:表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。(让页面等待两个脚本下载和执行,从而异步加载页面其他内容)
charset:表示通过 src 属性指定的代码的字符集
defer:表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效(浏览器立即下载,延迟执行)
src:表示包含要执行代码的外部文件,指向相应文件的 URL,而这个文件既可以是与包含它的页面位于同一个服务器上的文件,也可以是其他任何域中的文件
type:表示编写代码使用的脚本语言的内容类型
只要不存在 defer 和 async 属性,浏览器都会按照<script>元素在页面中出现的先后顺序对它们依次进行解析。在文档的<head>标签中包含所有的JavaScript文件,意味着必须等到全部 JavaScript 代码都被下载、 解析和执行完成以后,才能开始呈现页面的内容(浏览器在遇到<body>标签时才开始呈现内容),因此,一般讲script标签的引用放在body标签内,这样在解析包含的 JavaScript 代码之前,页面的内容将完全呈现在浏览器中
- JavaScript文件外部引用优点
- 可维护性
- 可缓存(多个页面引用同个文件,该文件只需下载一次,加快了页面加载速度)
- 数据类型
Undefined Number Boolean String Null Object 6种数据类型
- typeof 返回数据类型
- undefined类型 :使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined
- null类型:null 值表示一个空对象指针,如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null
*数值转换:Number()、 parseInt()、 parseFloat()->可带第二个参数,表示进制,如parseInt('AF',16)
- js 基本类型值和引用类型值
引用类型值是保存在内存中的对象,js不能直接操作对象的内存空间,而是操作对象的引用
函数的参数是按值传递的
- 检测类型
typeof 确定变量是字符串、布尔值、数值等
instanceof 判断它是什么类型的对象
- 环境
在web浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性创建的。某个执行环境中,所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁
小结之变量
- 基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中
- 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本
- 引用类型的值是对象,保存在堆内存中
- 包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针
- 从一个变量向复制另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象
小结之作用域
所有变量(包括基本类型和引用类型)都存在于一个执行环境(也称为作用域)当中,这个执行环境决定了变量的生命周期,以及哪一部份代码可以访问其中的变量
- 执行环境分全局环境和函数执行环境
- 每次进入一个新执行环境,就会创建一个用于搜索变量和函数的作用域链
- 函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其父环境乃至全局环境
- 全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据
- 变量的执行环境有助于确定应该何时释放内存
小结之垃圾回收
- 离开作用域的值将被自动标记为可以回收,因此将在垃圾收集期间被删除(“标记清除”算法)
- 解除变量的引用不仅有助于消除循环引用现象,对于垃圾回收也有好处。为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用(让对象=null,是让垃圾回收时可以回收该对象)