< script >的几个属性

async:可选。表示应该立即开始下载脚本,但不能阻止其他页面动作,比如下载资源或等待其他脚本加载。只对外部脚本文件有效。
crossorigin:可选。配置相关请求的CORS(跨源资源共享)设置。默认不使用CORS。crossorigin= "anonymous"配置文件请求不必设置凭据标志。crossorigin="use-credentials"设置凭据
标志,意味着出站请求会包含凭据。
defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。(先下载,但不立即执行)
在 IE7 及更早的版本中,对行内脚本也可以指定这个属性。
integrity:可选。允许比对接收到的资源和指定的加密签名以验证子资源完整性(SRI,Subresource Integrity)。如果接收到的资源的签名与这个属性指定的签名不匹配,则页面会报错,脚本不会执行。这个属性可以用于确保内容分发网络(CDN,Content Delivery Network)不会提供恶意内容。
src:可选。表示包含要执行的代码的外部文件。

CDATA 块

在 XHTML(及 XML)中,CDATA 块表示文档中可以包含任意文本的区块,其内容不作为标签来解析,因此可以在其中包含任意字符,包括小于号,并且不会引发语法错误。使用 CDATA 的格式如下:

<script type="text/javascript"><![CDATA[ function compare(a, b) { if (a < b) { console.log("A is less than B"); } else if (a > b) { console.log("A is greater than B"); } else { console.log("A is equal to B"); } }
]]></script>

在兼容 XHTML 的浏览器中,这样能解决问题。但在不支持 CDATA 块的非 XHTML 兼容浏览器中则不行。为此,CDATA 标记必须使用 JavaScript 注释来抵消:

<script type="text/javascript">
//<![CDATA[ function compare(a, b) { if (a < b) { console.log("A is less than B"); } else if (a > b) { console.log("A is greater than B"); } else { console.log("A is equal to B"); } }
//]]>
</script> 

这种格式适用于所有现代浏览器。

保留字

ECMA-262 第 6 版规定的所有关键字如下:

  • break do in typeof case else instanceof var catch export new void
    class extends return while const finally super with continue for
    switch yield debugger function this default if throw delete import
    try

规范中也描述了一组未来的保留字,同样不能用作标识符或属性名。虽然保留字在语言中没有特定
用途,但它们是保留给将来做关键字用的。
以下是 ECMA-262 第 6 版为将来保留的所有词汇。
始终保留:

  • enum

严格模式下保留:

  • implements package public interface protected static let private

模块代码中保留:

  • await

var 声明作用域

关键的问题在于,使用 var 操作符定义的变量会成为包含它的函数的局部变量。比如,使用 var在一个函数内部定义一个变量,就意味着该变量将在函数退出时被销毁:

function test() { var message = "hi"; // 局部变量
}
test();
console.log(message); // 出错!

这里,message 变量是在函数内部使用 var 定义的。函数叫 test(),调用它会创建这个变量并给它赋值。调用之后变量随即被销毁,因此示例中的最后一行会导致错误。不过,在函数内定义变量时省
略 var 操作符,可以创建一个全局变量:

function test() { message = "hi"; // 全局变量
}
test();
console.log(message); // "hi"

去掉之前的 var 操作符之后,message 就变成了全局变量。只要调用一次函数 test(),就会定义
这个变量,并且可以在函数外部访问到。

try-catch 语句

作为 JavaScript 中处理异常的一种标准方式。基本的语法如下所示:

try{ // 可能会导致错误的代码
} catch(error){ // 在错误发生时怎么处理
}

如果 try 块中的任何代码发生了错误,就会立即退出代码执行过程,然后接着执行 catch 块。此时,catch 块会接收到一个包含错误信息的对象。即使你不想使用这个错误对象,也要给它起个名字。这个对象中包含一个保存着错误消息的 message 属性和一个保存错误类型的 name 属性。

finally 子句
虽然在 try-catch 语句中是可选的,但 finally 子句一经使用,其代码无论如何都会执行。换句话说,try 语句块中的代码全部正常执行,finally 子句会执行;如果因为出错而执行了 catch 语句块,finally 子句照样还会执行。只要代码中包含 finally 子句,则无论 try 或 catch 语句块中包含什么代码——甚至 return 语句,都不会阻止 finally 子句的执行。来看下面这个函数。

function testFinally(){ try { return 2; } catch (error){ return 1; } finally { return 0; }
}

这个函数在 try-catch 语句的每一部分都放了一条 return 语句。表面上看,调用这个函数会返回 2,因为返回 2 的 return 语句位于 try 语句块中,而执行该语句又不会出错。可是,由于最后还有一个 finally 子句,结果就会导致该 return 语句被忽略;也就是说,调用这个函数只能返回 0。如果把 finally 子句拿掉,这个函数将返回 2。

只要代码中包含 finally 子句,那么无论try 还是catch 语句块中的return 语句都将被忽略。

如果提供 finally 子句,则 catch 子句就成了可选的(catch 或 finally 有一个即可)。

【连载】JavaScript高级程序设计(红宝书)阅读笔记相关推荐

  1. JavaScript高级程序设计红宝书学习笔记第三章基本概念

    第三章 基本概念 本章内容 语法 数据类型 操作符 语句 函数 3.1 语法 3.1.1 区分大小写,ECMAScript中的一切(变量.函数名和操作符)都区分大小写. 3.1.2 标识符 标识符:变 ...

  2. 红宝书阅读笔记(持续更新)

    今天是2021年8月15日 ,在自学的同时开始阅读前端相关的书籍,愿不断在学习中进步. 这一本是<JavaScript高级程序设计>(第四版),也俗称红宝书,第四版中加入了ES6. 下一本 ...

  3. 红宝书阅读笔记——OPENGL渲染管线

    之前读的时候一直觉得红宝书是很艰涩难懂的,不如NEHE的教程简单. 后来才发觉是自己没基础,几番折腾之后也只能用OPENGL做些简单的东西.半年没写,连glBegin都给忘了. 图形学的大作业要求写个 ...

  4. javascript 高级程序设计(第4版)阅读笔记(三)

    第3章,内容很长,所以更得慢,主要讲的是ECMAScript   es的语言基础:语法.数据类型.基本操作符.流控制语句.理解函数,ECMAScript 的语法很大程度上借鉴了 C 语言和其他类 C  ...

  5. 红宝书阅读笔记——缓冲区对象

    前面的顶点数组使得几何图元的显示方便了很多,但是如果每次都要向OPENGL发送一大块数据,而这数据其实并没有修改过,那么这传输就是冗余的.所以这里添加了缓冲区对象,将顶点数组存储在服务器端的缓冲区对象 ...

  6. 红宝书背诵笔记 — 基础词

    红宝书基础词 基础词-Unit1 基础词-Unit2 基础词-Unit3 基础词-Unit4 基础词-Unit5 基础词-Unit6 基础词-Unit7 基础词-Unit8 基础词-Unit9 基础词 ...

  7. 红宝书背诵笔记 — 简单基础词语

    简单基础词 a开头的简单基础词 b开头的简单基础词 c开头的简单基础词 d开头的简单基础词 e开头的简单基础词 f开头的简单基础词 g开头的简单基础词 h开头的简单基础词 i开头的简单基础词 j开头的 ...

  8. 《JavaScript高级程序设计(第四版)》红宝书学习笔记(2)(第四章:变量、作用域与内存)

    个人对第四版红宝书的学习笔记.不适合小白阅读.这是part2.持续更新,其他章节笔记看我主页. (记 * 的表示是ES6新增的知识点,记 ` 表示包含新知识点) 第四章:变量.作用域与内存 4.1 原 ...

  9. 《JavaScript高级程序设计(第四版)》红宝书学习笔记(1)

    个人对第四版红宝书的学习笔记.不适合小白阅读.这是part1,包含原书第二章(HTML中的Javascript)和第三章(语言基础).持续更新,其他章节笔记看我主页. (记 * 的表示是ES6新增的知 ...

  10. JS红宝书·读书笔记

    JavaScript高级程序设计 花了半个多月的时间,终于又把"JS红宝书"又撸了一遍. 第一次读"JS红宝书"还是2015年初学JS的时候,那时候只是把语法部 ...

最新文章

  1. 切勿版本化Web API
  2. WCF中使用HttpContext.Current的办法
  3. 解决安装下载好的whl库包时,报错:zipfile.BadZipFile: File is not a zip file
  4. 用html做工资查询登陆页面,薪资筛选页面.html
  5. python21天打卡Day9-string和dict类型互转
  6. 解决vcard乱码批量导入outlook
  7. 微信公众号一次性订阅消息功能开发实践
  8. 最全常见Web安全漏洞总结及推荐解决方案
  9. S32k144SDK版本——FTM_IC输入捕获
  10. 高仙与吾尚联合打造“人+机+纳米材料”石材养护新模式 首批60落地上海环球港
  11. [手机分享]黑莓手机8系列分享之——黑莓88XX系列
  12. L298N驱动俩路电机按键控制正反转
  13. 学习ARM开发(11)
  14. 触发器的使用,通过这个案例让你完全掌握
  15. c# 实现WebSocket
  16. 黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点!
  17. 专业治疗选择困难症----帮你做选择
  18. 【java笔记】day01
  19. 2009年具有高等学历教育招生资格普通本科高职院校名单
  20. MQL5 代码自动生成文档

热门文章

  1. 《英语整整折磨了我15年》有感
  2. 在cmd中,如何使用cd进入指定文件目录
  3. 自定义打印纸张的方法
  4. UBOOT下IXP425 PCI驱动程序设计
  5. Ubuntu下工作空间的创立以及思岚系列激光雷达的使用(详细)和驱动安装及地图创建
  6. 医疗数据之数据仓库的创建
  7. 【Java校招面试】实战算法(五)——分数相加(虎牙)
  8. php getenv shell,关于php的getenv()方法获取环境变量的问题
  9. SaaS架构实现理论(三)可配置多租户
  10. linux 中的 zcat 操作压缩包的命令