从上一章我们知道了,JavaScript是一种专门为网页交互而设计的脚本语言,那么,它就免不了和HTML打交道,所以在设计JavaScript的时候,Netscape首要面临的就是,怎么让HTML和JavaScript共存。本章也是围绕着这一问题而展开……

1.怎么在HTML中嵌入JavaScript

答:通过< script>元素

1.1 使用方法

在HTML中嵌入JavaScript,通过< script>元素,使用方式有两种

一个是直接在< script>< /script>中嵌入JavaScript代码

另一个是引入外部JavaScript文件:虽说嵌入代码和外部文件这两种方法并没有被要求应该用哪种,但是外部文件引用方式有以下几点明显优势:

1.可维护性高。分门别类地放在一个文件夹当然要比一股脑地写在一起容易维护;

2.可缓存。浏览器能够根据具体的设置来缓存所有外部JavaScript文件。也即是说,如果有同一个JavaScript文件被两个不同页面引用,那么该文件只用下载一次就够了;

3.兼容性好。 在XHTML中,直接嵌入代码可能会发生错误,而引入外部文件则不会。

1.2 < script>标签在HTML中存在位置

按照传统的做法,所有的< script>元素都应该放在< head>中,这样做是为了将所有的外部文件引入都放在同一个位置,如下图:

但是这样有一个很大的问题,这要从网页的加载顺序说起,我们网页解析的时候顺序是从上往下依次顺序加载,设想如果有一个很大很复杂的JavaScript文件存在于< head>中,那么整个后面的内容都要等这个JavaScript文件加载完才能继续加载。这样的交互体验很差,在JavaScript文件加载完之前,界面上将是一片空白。所以为了解决这个问题,人们就想了个办法,把< script>标签放在< body>标签里面、页面内容后面,如图:

1.3 < script>元素各属性

讲了< script>怎么引入文件以及它的存在位置,那么下面看看< script>本身又是个什么玩法。

在W3CSchool上,关于< script>标签的属性有这么两个表格,如图,分别是必选属性和可选属性,这里与《JavaScript高级程序设计》中所描述的有一点点出入。

(图来自W3CSchool)

在《JavaScript高级程序设计》这本书中,对于各个属性的定义,如同上图。下面来详细看一下上图中比较重要的几个属性:

type属性

与W3CSchool网站上不同的一点是,关于type属性,在《高程》中写的是可选属性。人们一直以来,最习惯的type是text/javascript,但其实,如果不指定这个属性,其默认值仍为text/javascript。但是,有一点必须注意,如果你是在< script>标签中嵌入JavaScript代码,那就必须要指定type属性(亲测为true,不然代码不会被执行)。

async属性

首先,async适用于外部脚本文件。 在讲async属性,请大家先回忆一下正常情况下网页的加载顺序,即从上至下依次执行,遇到< script>则停下来加载其脚本,加载完再继续往下。但加了async属性就不一样了。

熟悉异步编程的童鞋应该都知道,async代表异步。当做< script>的属性,如其名,它也是相当于在异步加载。加了async属性,就意味着,浏览器解析到脚本这里了,它会立即加载这个脚本,并且页面中的其他操作依旧继续。就好比做家务流程,制定计划,一叠被子,二洗衣服,三扫地,洗衣服就相当于加了async属性的脚本,当叠完被子之后,开始洗衣服,把衣服丢进洗衣机,开启,之后你就可以直接开始下个流程叠被子了,你并不用坐那儿等着衣服洗完再开始叠被子。

来看看下面这段代码,你应该很清楚它的执行顺序了:

如上图,网页的渲染并不会因为等待加载JavaScript文件而暂停。但有一点要注意的是,至于同时加了async的两个脚本,它们并不会按照指定的先后顺序执行。如图,脚本文件test1不一定先于test2执行。

defer属性

同样的,defer也适用于外部脚本文件。

defer是延迟的意思,加上defer属性的脚本都会被延迟到整个页面都解析完了之后再运行,如图:

与async不同的是,HTML5规范要求,加了defer属性的脚本,按照他们出现的先后顺序执行。但其实现实中延迟脚本不一定会按照顺序执行,因此在开发中最好只包含一个延迟脚本。还有一点需要注意的是,defer属性并不是百分百地兼容所有浏览器,所以把延迟脚本写在页面底部是最保险的。

2.在HTML中嵌入JavaScript,不兼容怎么办

在JavaScript诞生初期,有些浏览器并不支持JavaScript。为了让页面平稳退化,出现了< noscript>元素。只有在浏览器不支持脚本,或者说支持脚本但脚本被禁用时才会显示< noscript>标签中的内容。如图:

< noscript>和< script>就像是if else,如果支持就显示< script>,如果不支持就显示< noscript>。

第二章到这里就讲完啦~~继续下一章!!加油加油!!!

攻下《JavaScript高级程序设计》——第二章 在HTML中使用JavaScript相关推荐

  1. JavaScript 高级程序设计第二章

    第二章 教材: JavaScript 高级程序设计 目录 第二章 一. script元素 1. 介绍 2. 标签位置 2.1. 推迟执行脚本---defer属性 2.2. 异步执行脚本---async ...

  2. JavaScript高级程序设计(二):在HTML中使用JavaScript

    一.使用<script>元素 1.<script>元素定义了6个属性: async:可选.表示应该立即下载脚本,但不应该妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本 ...

  3. 重学JS(《JavaScript高级程序设计》笔记) - HTML中的JS

    HTML中的JavaScript script元素 由网景公司创造,有如下八个属性: async:可选,表示应该立即下载脚本,但不能阻止其他页面动作,只对外部文件有效.. defer:可选,表示脚本可 ...

  4. 第二章 在HTML中使用JavaScript

    2.1 <script> 元素 向HTML中插入JavaScript的主要方法就是使用 <script> 标签 <script>// 嵌入式 </script ...

  5. javascript高级程序设计阅读收获(1.1)——javascript简短的历史回顾

    1995年,网景公司(网景公司英文名为Netscape Communications Corporation)中的Brendan Eich工程师,为即将发布的Netscape Navigator 2( ...

  6. Javascript高级程序设计第二版第四章--变量,作用域及内存问题--笔记

    由于JavaScript 变量松散类型的本质,决定了它是在特定时间用于保存特定值的一个名字而已,变量的值及其数据类型可以在脚本的生命周期内改变.这可能既有趣又强大,同时又容易出问题. 4.1 语法 E ...

  7. Javascript高级程序设计第二版第十一章--DOM2,DOM3--笔记

    今天跟诸位分享一下,高程,第二版,11章,dom2,dom3 纵观这一章,一个概念,dom在变,现在变,未来变,反正不断的变. 不过变来变去,ie是不支持dom2,dom3,可能未来新版本支持部分do ...

  8. 《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript

    本章主要讲解了,怎么在HTML中使用: 1.<script src=""></script> 属性:defer="defer" 表示脚本 ...

  9. Javascript高级程序设计第二版第十四章--异常--笔记

    chaepter 14 错误异常分享. 其实主要是就是 try{ }catch(error){ } finally { } 这个语句的理解. 主要一点: finally 在 return 之后 运行. ...

最新文章

  1. linux日志管理命令详解
  2. 2018-2019-1 20189206 《Linux内核原理与分析》第六周作业
  3. 洛谷P3810 【模板】三维偏序(陌上花开) CDQ分治初探
  4. 使用ToughMySQL为ToughRADIUS系统提供数据存储
  5. python求最小值不能使用min和sotred_python基础——内置函数
  6. LeetCode 第 197 场周赛(468/5273,前8.88%)
  7. 大学计算机规划教材数据与计算,大学计算机应用基础教程高等院校计算机科学与技术规划教材.ppt...
  8. 李迟2021年9月知识总结
  9. 10-1-数据库连接池
  10. 解决办法:ImportError: No module named pycuda.driver
  11. hashmap containsvalue时间复杂度_面试宝典:数据结构-HashMap
  12. python如何读取dbf文件_python2.7读取dbf文件的正确姿势
  13. ajax传参后台中文乱码
  14. 基于VC 6.0实现简单的微信打飞机
  15. 柳传志二十年驭人成就柳氏联想
  16. 当地特色旅游系统 计算机毕业设计 微信小程序开发
  17. python的Pmw库的安装
  18. 驱动开发笔记1—内核中的事件、进程、线程、自旋锁
  19. 网络架构模式 B/S C/S
  20. PHP对接僵尸,php – 终止从套接字服务器分叉的僵尸子进程

热门文章

  1. 划水是程序员必备的技能吗? | 每日趣闻
  2. 惊呆了!两人发现抵用券漏洞,疯狂“薅羊毛”获利 770 余万
  3. 老铁 666!快手上市暴涨 200%,超 4000 员工成为千万富翁
  4. /etc/issue、shutdown练习
  5. Spring事务——Spring 2.X的事务配置策略
  6. 使用microsoft EnterpriseLibrary连接不同数据库简单应用 .
  7. NAnt学习笔记(2) -- 节点的含义解释
  8. 三、Qt Creator登录对话框
  9. suse 12sp1 oracle 11g r2 时出现错误 调用/sysman/lib/ins_emagent.mk的目标nmo时出错
  10. openstack-9:安装neutron网络服务