一、简介
JavaScript是一种专为网页交互而设计的脚本语言,由三个部分组成:
- ECMAScript,提供核心语言功能
- DOM(文档对象模型),提供访问和操作网页内容的方法和接口
- BOM(浏览器对象模型),提供与浏览器交互的方法和接口
二、在HTML中使用JavaScript
1.<script>
标签
- defer延迟脚本:脚本会被延迟到整个页面都解析完毕后载运行,在执行时不会影响页面构造(立即下载,延迟执行)
defer = "defer"
- async异步脚本:立即下载文件,但不保证执行的先后顺序(必须确保异步脚本之间不相互依赖),目的是不让页面等待脚本的下载和执行,从而异步加载页面其他内容
async = "async
2.在XHTML中使用script
<script type="text/javascript">
//<![CDATA[
CData片段是文档中的一个特殊区域,这个区域可以包含不需要解析的任意文本内容
在不兼容CData的浏览器中将CData标记注释即可
//]]>
</script>
3.<noscript>
可以在不支持脚本的浏览器里显示代替的内容,若在启用了脚本的情况下,浏览器不会显示<noscript>
元素中的任何内容
三、变量、作用域和内存问题
基本类型和引用类型
1.基本类型:Undefined,Null,Boolean,Number,String
2.动态属性:对于引用类型,可以为其添加属性和方法
var person = new Object();
person.name = "Nichalas";
3.复制变量值
- 复制基本类型的值,会创建这个值的一个副本;
- 复制引用类型的值,复制的是指针,因此两个变量最终指向同一个对象
4.检测类型
- typeof操作符确定基本类型的值
- instanceof操作符确定引用类型
var n = 1;
alert(typeof n); //number
var o = new Object();
alert(typeof o); //object
alert(o instanceof Object); //true
执行环境及作用域
- 执行环境有全局执行环境和函数执行执行环境之分
- 每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链
- 函数的局部环境不仅能访问函数作用域中的变量,而且有权访问其父环境,乃至全局环境
- 全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据
- 使用var声明的变量会被自动添加到最接近的环境中,不使用var声明的变量会自动添加到全局环境中
- with语句:将代码的作用域设定到一个特定的对象中
垃圾收集
- 标记清除:给当前不使用的值加上标记,然后回收其内存
- 引用计数:跟踪记录每个值被引用的次数,但在循环引用现象时会导致问题