在HTML中使用JavaScript

在前端开发中,HTML是整个页面的基石,用于控制页面的结构,如果没有HTML的话,JavaScript也将无用武之地,所以使用JavaScript的首要问题就是如何将其与HTML页面结合起来。

向HTML中添加JavaScript的方法就是利用<script>标签,使用<script>元素的方法有两种:

  1. 在页面内直接写JavaScript代码

     <script>function sayHi() {alert("Hi");}</script>        
  2. 引用外部JavaScript文件

     <script src="example.js"></script>

写在<script>标签中的代码将被从上往下依次解释。在解释器对<script>中的所以代码求值完毕之前,页面中其余内容都不会被浏览器加载或显示。

<script>标签的位置

传统的做法是将<script>标签放到页面的<head>元素中,如:

    <!DOCTYPE html><html ><head><title>Example HTML Page</title><script src="exmpale1.js"></script><script src="example2.js"></script></head><body><!-- contents go here --></body></html>

这种做法与引入CSS文件类似,目的是将引入文件的动作全部集中在一个位置,但是这种做法有一个缺点,那就是在JavaScript代码全部最下载、解析和执行之前,页面中的内容都不会显示。假如我们引用了比较多的js文件,或者是在一个外国的网站,导致下载速度并不快,这就会造成一个的明显延迟,在这期间页面将是一片空白,这显然是非常不好的用户体验。所以,现代的web程序一般将<script>标签放在<body>的结束标签之前,这样在解析包含的JavaScript代码之前,页面内容就会先全部显示在浏览器中。

    <!DOCTYPE html><html><head><title>Example HTML Page</title></head><body><!-- contents go here --><script src="jquery.min.js"></script><script src="example.js"></script></body></html>

延迟脚本

在HTML4.01中为<script>定义了defer属性,这个属性的用途是表明脚本在执行的时候不会影响页面的构造。在<script>中指定这个属性就是告诉浏览器可以立即下载脚本,但是要延迟执行。

    <!DOCTYPE html><html><head><title>Document</title><script defer="defer" src="example.js"></script></head><body><!-- contents go here --></body></html>

上面这段代码虽然放在<head>中,但是其引用的脚本会在浏览器遇到</html>标签后才执行。

defer属性只有在引用外部JavaScript文件的时候才会起作用,如果给嵌入脚本使用这个属性,则浏览器会直接忽略这个属性。而且并非所有的浏览器都支持这个属性,对于不支持此属性的浏览器也会直接忽略该属性。所以,将会导致延迟的脚本放到页面的底部仍是最佳的选择。

异步脚本

HTML5为<script>定义了async属性,这个属性的目的是让页面不用等待脚本的下载和执行,从而可以异步加载页面的其它内容。与延迟脚本一样,async也只适用于外部脚本。

嵌入代码与外部文件哪家强

一般来讲,引用外部文件的做法会比将代码直接嵌入到HTML文件中更有优势。
虽然JavaScript中没有强调使用外部文件的规定,但是使用外部文件会有更多的优点:

  • 可维护性
    嵌入性的代码会在遍布在各个HTML文件中,如果项目比较大,并且页面文件比较多,就会造成一定程度的混乱,所以将所有的JavaScript文件都放到同一个目录中,维护起来会比较轻松。说得比较专业一点就是可以将结构与行为相分离。
  • 可缓存
    如果多个文件使用的是同一套代码,则使用外部文件的时候只需要下载一次代码就够了,这能够加快页面的加载速度。

<noscript>元素

这个元素的作用跟他的名字一样,就是在当浏览器不支持JavaScript的时候用来显示替代的内容。这个元素只有在以下情况中才会被显示出来:

  • 浏览器不支持脚本
  • 浏览器支持脚本,但是脚本被禁用

下面是一个简单的例子:

    <!DOCTYPE html><html><head><title>Document</title><script type="text/javascript" defer="defer" src="example1.js"></script><script type="text/javascript" defer="defer" src="example2.js"></script></head><body><noscript><p>This page does not support javascript</p></noscript></body></html>

这段代码会在浏览器的JavaScript不可用的时候在页面上显示一条消息,而在启用了JavaScript浏览器中,用户则永远不会看到这条消息。

转载于:https://www.cnblogs.com/buginux/p/4092576.html

《JavaScript高级程序设计》学习笔记(第二章)相关推荐

  1. 《3D游戏与计算机图形学中的数学方法》学习笔记 第二章

    第二章 向量 该章主要讲述向量的基本概念和性质,并且给出了性质的证明. 证明笔记这里就不给出了,毕竟向量的基本性质都是印在脑子里的东西了,要看证明的话可以翻小.初.高课本- 2.1向量性质 定理2.1 ...

  2. java3d点线面_3D游戏与计算机图形学中的数学方法-点线面

    <易传·系辞上传>:"易有太极,是生两仪,两仪生四象,四象生八卦." 借用一下古代先人们的智慧引一下本文的主题-三维图形中的点线面,在三维几何中也有一句话可以和上面的话 ...

  3. 《计算机图形学原理及实践》学习笔记之第十章

    第十章 2D 变换 线性变换: 对于 2D 空间: T:R2−>R2T:R^2 -> R^2T:R2−>R2 R2R^2R2 表示二维空间,及一个二维空间向量 或 点经过线性变换仍是 ...

  4. 计算机安全原理与实践_《计算机图形学原理及实践》学习笔记之第三章

    第三章 一个古老的绘制器 1525年,阿尔布雷·丢勒 制作了一幅木刻画,展示了一种可以绘制任一形体透视图的方法. 本章我们将开发一个软件来模拟丢勒展示的方法. 丢勒视角绘制算法的伪代码 Input: ...

  5. 《计算机图形学原理及实践》学习笔记之第三章

    第三章 一个古老的绘制器 1525年,阿尔布雷·丢勒 制作了一幅木刻画,展示了一种可以绘制任一形体透视图的方法. 本章我们将开发一个软件来模拟丢勒展示的方法. 丢勒视角绘制算法的伪代码 Input: ...

  6. MIT18.065 数据分析、信号处理和机器学习中的矩阵方法-学习笔记

    文章目录 MIT18.065 数据分析.信号处理和机器学习中的矩阵方法 Lecture 1 The Column Space of A Contains All Vectors Ax A=CR A=C ...

  7. 数学之美--计算机图形学中的数学方法论

    我的github: https://github.com/jackyblf 我的公众号: 早期研究3D程序开发的程序员最大的情怀就是从无到有,自己实现一个游戏引擎.当时的我也是充满着这种复古情怀!! ...

  8. 计算机图形学与opengl C++版 学习笔记 第5章 纹理贴图

    目录 5.1 加载纹理图像文件 5.2 纹理坐标 5.3 创建纹理对象 5.4 构建纹理坐标 5.5 将纹理坐标载入缓冲区 5.6 在着色器中使用纹理:采样器变量和纹理单元 5.7 纹理贴图:示例程序 ...

  9. 计算机图形学与opengl C++版 学习笔记 第11章 参数曲面

    目录 11.1 二次贝塞尔曲线(三点) 11.2 三次贝塞尔曲线(四点) 11.3 二次贝塞尔曲面(3x3控制点) 11.4 三次贝塞尔曲面(4x4控制点) 补充说明 在20世纪50年代和60年代在雷 ...

  10. 计算机图形学与opengl C++版 学习笔记 第14章 其他技术

    目录 14.1 雾 14.2 复合.混合.透明度 14.3 用户定义剪裁平面 14.4 3D纹理 14.5 噪声 14.6 噪声应用--大理石 14.8 噪声应用--云 14.9 噪声应用--特殊效果 ...

最新文章

  1. HTTP/HTTPS的请求和响应
  2. Mysql HA实现MYSQL的高可用(上)
  3. mybatis example处理and、or关系的方法
  4. OSChina 周六乱弹 —— 运维狗的背锅日常
  5. MTK 驱动(79)---如何调整CPU corenum, freq, policy
  6. C++对双链表的操作
  7. 分布式平台下的HS(High-Security) --对称加密
  8. bzoj 3609: [Heoi2014]人人尽说江南好(博弈)
  9. Flex Builder 不能Profile的另一个原因:不能使用中文用户名
  10. 单个数码管循环显示1-9
  11. 如何安装并且运行阿帕奇服务器 for windows
  12. ATTINY85 和 ATTINY84 与arduino的对应引脚
  13. 需求分析-4 用例分析
  14. XGBoost 与 信用卡诈骗数据集 二
  15. 长理2019选拔赛1.0
  16. 海信电视买哪个型号好 2023海信电视系列机型选购推荐
  17. 33省市出台区块链专项政策,有地方拿户口、百万奖金抢人
  18. 基于强化学习与深度强化学习的游戏AI训练
  19. vmware虚拟机上网设置教程(vmware虚拟机设置网络)
  20. XML DOM摘要五(XPath)

热门文章

  1. Java中活锁和死锁有什么区别?
  2. Mybatis核心配置文件SqlMapConfig.xml独立使用配置内容
  3. spring boot整合mybatis步骤
  4. android listview下拉动画效果,Android开发中利用ListView实现一个渐变式的下拉刷新动画...
  5. access窗体中再制作查询窗体_Access
  6. C/C++基础知识点(一)
  7. Felgo简介--Qt开发者的福音
  8. QML for Android通过ScreenRecorder录制屏幕并保存为本地视频
  9. 一个创业者的妥协与希望
  10. 8086逻辑运算和移位