JavaScript高级程序设计读书笔记

JavaScript简介

  • JavaScript历史
    客户端完成表单验证

  • JavaScript是什么
    ECMAScript + DOM + BOM

    • ECMAScript
      • 由ECMA-262定义,提供核心语言功能
    • DOM(document object model 文档对象模型)
      • 提供访问和操作网页内容的方法和接口
      • 针对XML但经过扩展用于HTML的应用程序编程接口(API),可以把整个页面映射为一个多层节点结构。
      • 开发人员无需重新加载网页,就可以修改其外观和内容。
      • DOM1级:映射文档借口
      • DOM2级:views视图 events事件 style样式 traversal and range遍历和范围
    • BOM(browswe object model 浏览器模型对象)
      • 提供与浏览器交互的方法和接口
  • JavaScript与ECMAScript的关系

    • web浏览器只是ECMAScript实现可能的宿主环境之一,两者无依赖关系。宿主环境提供ECMAScript的实现和扩展,如JavaScript。
  • JavaScript的不同版本

在HTML中使用JavaScript

  • <script>元素
    • 使用方式
      直接在页面中嵌入或者包含外部文件。
      只要不存在defer和async,浏览器都会按照<script>元素在页面中出现的先后顺序对它们依次进行解析。
    • 标签位置
      • 传统做法:放置<head>中,意味着必须等到全部JavaScript代码都被下载解析和执行完成之后才开始呈现内容,有可能会导致延迟。
      • 现代web应用程序一般都会把全部JavaScript引用放在<body>元素中页面内容的后面,这样显示空白页面的时间会缩短。
    • 6个属性:
属性 作用
async 立即下载脚本(只对外部脚本有效)异步执行
charset 字符集(大多数浏览器会忽略)
defer 延迟到文档完全被解析和显示之后执行(只对外部脚本有效)
src 包含要执行代码的外部条件
language 已废弃
type 脚本语言类型,默认为text/javascript
  • 嵌入代码与外部文件
    • 外部条件的优点
      • 可维护性:HTML和JavaScript代码分离,结构和逻辑行为分离
      • 可缓存:文件只需下载一次
      • 适应未来

变量、作用域和内存问题

基本类型

  • Undefined
  • Null
  • Number
  • Boolean
  • String

注意

  • 不能给基本类型添加属性
  • 函数参数按值传递(见以下例子)
function setName(obj) {
  obj.name = "Nicholas";
  obj = new Object();
  obj.name = "Greg";
}

var person = new Object();
setName(person);
alert(person.name); // "Nicholas"

上述例子中,创建了一个对象,并将其保存在变量 person 中。然后,这个变量被传递到 setName() 函数中之后就复制给了 obj (注意不是引用)

在这个函数内部,obj 和 person 引用的是同一个对象(即使是按值传递)。

然而当函数内部 重写 obj 时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立刻被销毁。

检测类型

  • typeof 检测基本类型
  • instanceof 检测引用类型

执行环境及作用域

  • 执行环境仅分为全局和局部(函数)
  • JavaScript 没有块级作用域

垃圾回收

JavaScript 是一门具有自动垃圾收集机制的编程语言,因而我们不必关心内存分配和回收问题。

目前主流的垃圾收集算法是“标记清除”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容