script标签

js在浏览器中的使用,肯定会涉及到script标签。

那么script标签有哪些属性呢?

1.async:异步加载(不让页面等待该脚本的加载执行,异步加载页面的其他部分)

2.charset:设置js的字符集编码

3.defer:延迟脚本(当浏览器解析到/html 结束标签时才执行,该属性对嵌入脚本无效)

4.language:代码所使用的脚本语言(已废弃)

5.src:要执行的外部代码文件

6.type:与language类似可以看作是language的替代属性

在上面的这些属性中src就不用过多的说明了,除了src使用较多,并且应用范围较广的就是async和defer了

下面将主要分析一下这两个属性

首先是defer

根据说明,设置了该属性的script外部文件会在解析到</html>标签的时候才开始执行,并且会在DOMcontentonload 之前触发

而且根据html5的要求这些延迟脚本会按照在文档中的顺序执行

DOM文档加载步骤:

(1)解析html结构

(2)加载外部脚本和样式表文件

(3)解析并执行脚本代码

(4)构造HTML DOM模型   //DOMContentLoaded执行点

(5)加载图片等外部文件

(6)页面加载完毕  //load

我们来测试一下

首先新建一个简单的html页面

<!DOCTYPE html>
<html lang="zh">
<head>
<title>title</title>
<meta charset="utf-8"/>
<meta name="Description" content=""/>
<meta name="Author" content="巽秋"/>
<style type="text/css"></style>
<script src="./1.js"></script>
<script src="./2.js"></script>
</head>
<body> <script>
window.addEventListener("DOMContentLoaded", function () { //添加DOMContentLoaded事件
console.log("domContentLoad执行");
}, false);
console.log("这里是嵌入脚本");
</script>
</body>
</html>

引入的外部js文件代码如下:

console.log("这里是外部脚本1");//1.js 中的内容
console.log("这里是外部脚本2");//2.js 中的内容

我们打开该页面结果如下:

我们可以看到DOMContentLoaded是在js代码执行完后执行的

现在我们再给外部引入的两个js文件加上defer属性

再次运行查看结果

我们可以看到嵌入脚本比1.js和2.js先执行了并且在domcontentloaded事件触发之前就执行完毕了

和我们预先预测的结果一致。

接下来我们再看一下,这两个外部文件的执行顺序是否真的和在页面中出现的顺序一致

我们交换一下两个script标签的引入的位置

再看一下结果

说明defer的延迟脚本的加载顺序和该脚本在页面中出现的顺序是一致的

说明的确是这样的

不过书中说实际上有可能不一定是这样的,所以我又换了几个浏览器试试

刚才的是chrome浏览器的结果

这是火狐浏览器的结果

这是ie11

ie10

虽然在低版本ie中addEventlistenter有兼容问题但是我们可以看到defer脚本的加载顺序并没有什么改变

所以我也不知道在什么情况下延迟脚本会不遵守这个规则

然后是async

书中给出的描述是有该属性的脚本,立即加载并执行,页面的其他部分异步加载

并且async属性的标签一定会在window.onload之前执行,可能会在domcontentloaded之后执行

该属性的脚本不会按顺序到来,所以在使用时需要确保该属性的脚本之间没有依赖关系

首先给之前引入的两个标签的defer改为async属性

然后加上window.onload事件

再来看一下结果

<!DOCTYPE html>
<html lang="zh">
<head>
<title>title</title>
<meta charset="utf-8"/>
<meta name="Description" content=""/>
<meta name="Author" content="巽秋"/>
<style type="text/css"></style>
<script src="./2.js" async></script>
<script src="./1.js"async></script>
</head>
<body> <script>
window.addEventListener("DOMContentLoaded", function () { //添加DOMContentLoaded事件
console.log("domContentLoad执行");
}, false);
window.onload = function(){
console.log("window.onload执行");
};
console.log("这里是嵌入脚本");
</script>
</body>
</html>

结果如下

这里由于页面异步加载所以

嵌入脚本先执行了

异步脚本在domcontentloaded之后执行的

我为了测试不按顺序到来

我给两个js的consle之前加了循环

来控制加载的时间

看看异步脚本是谁先加载完就先执行吗?

我在2.js的后面粘贴了jq1.12.4的代码

让2.js比1.js文件要大 但是console都是第一句代码

2.js还会先console吗?

我们再来看看结果

结果很显然

async 属性的脚本应该是谁先加载完谁就先执行,并且不管怎样一定会在window.onload事件之前执行

noscript标签

当浏览器没有js环境,或者js被关闭的时候我们往往需要给用户一些提示之类的

那么这就是noscript标签的作用

我们再建一个新的html页面

<!DOCTYPE html>
<html lang="zh">
<head>
<title>title</title>
<meta charset="utf-8"/>
<meta name="Description" content=""/>
<meta name="Author" content="巽秋"/>
<style type="text/css"></style>
</head>
<body> <noscript>您的浏览器未开启js</noscript>
<script>
console.log("js");
</script>
</body>
</html>

我们打开这个页面

我们可以看到在js开启的情况下noscript标签中的内容是不会显示的

我接下来关闭js

然后刷新页面

今天就记录一下script标签吧

写完,收工。

Javascript高级编程学习笔记(2)—— Script标签的更多相关文章

  1. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

  2. Javascript高级编程学习笔记(43)—— 动态脚本

    动态脚本 大多数情况下,DOM操作都很简洁明了 因为DOM主要就是用来操作页面中的可视节点的 但有些时候我们又希望可以动态的来进行DOM操作 其中的一部分也就是今天我们的内容动态脚本 动态脚本是什么意 ...

  3. Javascript高级编程学习笔记(48)—— HTML5

    HTML变动最大的版本应该就是HTML5了,这里就介绍一些 HTML5新增的DOM相关的API 与类相关的扩充 HTML4在普及后有一个十分重要的变化,即class属性使用的场景越来越多 所以HTML ...

  4. Javascript高级编程学习笔记(98)—— WebGL(4) WebGL上下文(2)

    错误 Javascript与WebGL之间的一个最大区别在于,WebGL的操作一般不会抛出错误 如果希望获取WebGL的错误信息,那么就需要手动调用  gl.getError() 方法 该方法会返回以 ...

  5. Javascript高级编程学习笔记(61)—— 事件(5)UI事件

    UI事件 UI事件是指那些不一定与用户操作有关的事件 这些事件在DOM规范出现之前,都是以各种不同的形式存在于不同的浏览器 而在DOM事件中为了保证向后兼容,现有的UI事件如下: DOMActivat ...

  6. Javascript高级编程学习笔记(6)—— 流程控制语句

    话不多说,我们直接开始进入今天的主题 流程控制语句 首先什么是流程控制语句呢? 顾名思义,就是控制流程的语句. 在JS中语句定义了ECMAScript中的主要语法,让我们可以使用一系列的关键字来完成指 ...

  7. JavaScript高级编程学习笔记(第三章之一)

    继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...

  8. Javascript高级编程学习笔记(97)—— WebGL(3) WebGL上下文(1)

    WebGL上下文 在支持WebGL的浏览器中,WebGL的名字为 "experimental-webgl",这是由于 webgl 的规范仍未制定完成 制定完成后名字就会改为简单的 ...

  9. Javascript高级编程学习笔记(96)—— WebGL(2) 类型化视图

    类型化视图 类型化视图一般也被认为是一种类型化数组. 因为其元素必须是某种特定的数据类型,类型化视图都继承自 Dataview Int8Array: 表示8位二补整数(即二进制补数) Uint8Arr ...

随机推荐

  1. BerOS File Suggestion(字符串匹配map)

    BerOS File Suggestion(stl-map应用) Polycarp is working on a new operating system called BerOS. He asks ...

  2. Ubuntu安装pyucharm的专业版本

    看到了不错的教程,亲测有效. https://www.cnblogs.com/huozf/p/9304396.html

  3. centos7下面添加htop工具

    htop下载wget http://sourceforge.net/projects/htop/files/latest/download 解压tar -zxf downloadcd htop-1.0 ...

  4. DB2在dbvisualizer 客户端执行begi/end 语句块

    注意,begin end 代码块在dbvisualizer 执行前要加 --/   后面要加   / 注意,begin end 代码块在dbvisualizer 执行前要加 --/   后面要加    ...

  5. 测试Linux下tcp最大连接数限制

    现在做服务器开发不加上高并发根本没脸出门,所以为了以后吹水被别人怼“天天提高并发,你自己实现的最高并发是多少”的时候能义正言辞的怼回去,趁着元旦在家没事决定自己写个demo搞一搞. 这个测试主要是想搞 ...

  6. 数据库常用操作(mysql)

    创建 create database 库名 create table 表名(列名 type(varchar(size),int(size),decimal(size,d))) "size&q ...

  7. FortiGate防火墙对数据包处理流程

    1.流程图 2.防火墙对数据包处理过程的各步骤如下: 1)Interface(网卡接口) 网卡接口驱动负责接数收据包,并转交给下一过程. 2)DoS Sensor(DoS防御,默认关闭) 负责过滤SY ...

  8. java基础 ----- 循环结构

    循环的结构特点 :    循环条件   循环操作 -----     while 循环 来个小例子,实现打印50 份shij 1.确定循环条件和循环操作 2.套用while语法写出代码 3.检查循环能 ...

  9. python—切片

    切片就是list取值的一种方式 l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(l[1:5]) #取值方式顾头不顾尾 print(l[:5]) #冒号 前面 没写代 ...

  10. 1,postman的安装

    1,下载postman 2,安装,下载和自己系统相对应的版本 本人下载的是window版本的,直接一步步安装就行 打开后进入下边的界面 建议使用native版本的postman,chrome插件的po ...