《JavaScript高级程序设计》研读(一)——JS简介与在HTML中使用JavaScript

前言:

本来打算学习一下主流的前端框架,但是在学习的过程中,深深地感受到了自己基础的薄弱,对很多js的基础知识一知半解,尤其是一些比较冷门或者涉及到底层知识的问题。因此决定先把根基打牢,准备研读一下《JavaScript高级程序设计》,俗话说磨刀不误砍柴工嘛。
大一时候刚接触前端,心血来潮买了这本书,结果看了没几页就扔到一边去了。一方面是页数实在太多,更主要的是因为当时对于JS完全零基础,阅读起来难度较大。而且书中内容偏理论,不像一些实战类教程看了就能上手做项目。
现在再拿起这本书,读起来已经不像最初一样不知所云了。在看了章节目录和随意翻阅了几章之后,发现这本书写的真的非常好,十分的有条理,而且书中内容几乎涵盖JavaScript中所有的知识。因此决定将《JavaScript高级程序设计》作为第一块“磨刀石”。
写这篇博客的目的主要是记录一下书中的知识点,方便将来回首整理。


第一章 JS简介

1. JavaScript的实现由三部分组成:

核心(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM)

2. ECMAScript,提供核心语言功能:

ECMA-262定义了这门语言的基础,主要包含了:语法、类型、语句、关键字、保留字、操作符、对象。

3. DOM,提供访问和操作网页内容的方法和接口:

文档对象模型(DOM,Document Object Model)是针对XML但经过扩展用于HTML的应用程序编程接口。DOM把整个页面映射为一个多层节点结构,开发人员通过DOM提供的API来对这些节点进行增删查改等操作。

4. BOM,提供与浏览器交互的方法和接口:

浏览器对象模型(BOM,Browser Object Model),开发人员可以通过BOM控制浏览器显示的页面以外的部分。例如弹出新浏览器窗口、移动缩放关闭浏览器等等。


第二章 在HTML中使用JavaScript

1. <script>元素:

使用<script>元素的方式有两种:直接在页面嵌入JavaScript代码和包含外部JavaScript文件

1.1 使用<script>元素嵌入JavaScript代码

在使用<script>元素嵌入JavaScript代码时,只需要为<script>指定type属性。然后像下面这样把JavaScript代码直接放在元素内即可:

<script type="text/javascript">
    function sayHi(){
        alert("Hi!");
    }
</script>

注意:
包含在<script>元素内部的JS代码将被从上至下依次解释。
在使用<script>嵌入JS代码时,要保证在代码的任何地方不能出现“</script>”字符串,因为按照解析规则,会认为这是结束标签。可以通过转义字符“\”解决,例如:

<script type="text/javascript">
    function sayScript(){
        alert("<\/script>");
    }
</script>
1.2 通过<script>元素包含外部JavaScript文件

如果通过<script>元素来包含外部JS文件,那么必须填写 src 属性,这个属性的值是一个指向外部JS文件的链接,例如:

<script type="text/javascript" scr="example.js"></script>

注意:
1. 带有 src 属性的<script>元素不应该在<script>和</script>标签之间再包含额外的JS代码。如果嵌入了代码,则嵌入的代码会被忽略。
2. 通过<script>元素的 src 属性还可以包含来自外部域的JS文件,即它的 src 属性可以指向当前HTML页面所在域之外的某个域中的完整 URL,例如:

<script type="text/javascript" scr="http://www.somewhere.com/afile.js"></script>
1.3 标签的位置

按照传统的做法,所有<script>元素都应该放在页面的<head>元素中,但是对于需要很多JS代码的页面来说,会导致浏览器在呈现页面时出现明显的延迟。因此,现代 web 应用程序一般会把全部JS引用都放在<body>元素中页面的后面。如下所示:

<!DOCTYPE html>
<html>
    <head>
        <title>Example HTML Page</title>
    </head>
    <body>
        <!-- 页面内容 -->
        <script type="text/javascript" scr="example1.js"></script>
        <script type="text/javascript" scr="example2.js"></script>
    </body>
</html>

这样,在解析包含的 JS 代码之前,页面的内容将完全呈现在浏览器中。

1.4 延迟脚本

HTML 4.01 为<script>标签定义了 defer 属性。这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>元素中设置 defer 属性,相当于告诉浏览器立即下载,但延迟执行。

<!DOCTYPE html>
<html>
    <head>
        <title>Example HTML Page</title>
    </head>
    <body>
        <!-- 页面内容 -->
        <script type="text/javascript" defer="defer" scr="example1.js"></script>
        <script type="text/javascript" defer="defer" scr="example2.js"></script>
    </body>
</html>

注意:
HTML5 规范要求脚本按照出现的先后顺序执行,并且脚本会先于 DOMContentLoaded 事件执行但是,延迟脚本并不按照顺序执行,也不一定会在 DOMContentLoaded 事件触发前执行,因此最好只包含一个延迟脚本。

1.5 异步脚本

HTML5 为<script>元素定义了 async 属性。与 defer 类似,都用于改变处理脚本的行为,同样也只适用于外部脚本文件。但与 defer 不同的是,标记为 async 的脚本并不保证按照指定他们的先后顺序执行。例如:

<!DOCTYPE html>
<html>
    <head>
        <title>Example HTML Page</title>
    </head>
    <body>
        <!-- 页面内容 -->
        <script type="text/javascript" async scr="example1.js"></script>
        <script type="text/javascript" async scr="example2.js"></script>
    </body>
</html>

注意:
1. 在以上代码中,第二个脚本可能会在第一个脚本之前执行。因此,确保两者之间互不依赖非常重要。
2. 指定 async 属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。为此,异步脚本最好不要在加载期间修改DOM.
3. 异步脚本一定会在页面的 load 事件前执行,但可能会在 DOMContentLoaded 事件触发之前或之后执行。

1.6 在 XHTML 中的语法(暂不介绍)

2. 使用外部文件的优点:

  1. 可维护性:JS文件集中存放,维护相对轻松
  2. 可缓存:浏览器能够缓存外部JS文件,当多个页面使用同一文件时只需下载一次。
  3. 适应未来:对于 HTML 和 XHTML 来说语法是相同的。

3. 文档模式:

  1. 混杂模式
  2. 标准模式

4. <noscript>元素:

适用场景:
1. 浏览器不支持脚本
2. 浏览器支持脚本,但脚本被禁用
当出现上述情况时,浏览器会显示<noscript>中的内容。除此之外,浏览器中不会呈现<noscript>中的内容。

<!DOCTYPE html>
<html>
    <head>
        <title>Example HTML Page</title>
        <script type="text/javascript" scr="example1.js"></script>
    </head>
    <body>
        <noscript>
            <p>本页面需要浏览器支持(启用)JavaScript。</p>
        </noscript>
    </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值