JS笔记(一)基础知识

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。JS笔记(一)基础知识,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

JS笔记(一)基础知识

一、浏览器执行JS简介

浏览器分为两部分:渲染引擎和 JS 引擎

  • 渲染引擎:用来解析HTML和CSS,俗称内核,如chrome的blink,老版本的webkit
  • JS引擎:也称为JS解释器。用来读取网页中的JavaScript代码,对其处理后运行,如chrome浏览器的v8

       浏览器本身不会执行JS代码,而是通过内置JavaScript引擎(解释器)来执行JS代码。JS引擎执行代码时逐行解释每一句源码(转换为机器语言),然后由计算机去执行,所以JavaScript语言归为脚本语言,会逐行解释执行

 

二、JavaScript实现

  • 核心(ECMAScript)
  • 文件对象模型(DOM):标准编程接口,通过DOM提供的接口可以对页面上的各种元素进行操作(大小、位置、颜色等)
  • 浏览器对象模型(BOM):提供独立于内容的、可以与浏览器窗口进行互动的对象结构。通过BOM可以操作浏览器窗口,如弹出框、控制浏览器跳转、获取分辨率等

JS笔记(一)基础知识  
JS笔记(一)基础知识

 
 

2.1 ECMAScript

       ECMAscript-262定义的语言,将这门语言作为一个基准,以便构建更稳健的脚本语言。web浏览器只是ECMAScript实现可能存在的一种宿主环境,提供ECMAScript的基准实现和与环境自身交互必须的扩展

不涉及浏览器,在基本层面,ECMAScript描述了:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 操作符
  • 全局对象

 

2.2 DOM

一个应用编程接口,用于在HTML中使用扩展的XML,DOM将整个页面抽象为一组分层节点

 

三、HTML中的JS

3.1 <script>元素

script 元素的属性:

  • async:可选。表示应该立即下载脚本,不能阻止其他页面动作(如下载资源)。只对外部脚本有效

  • charset:可选。使用src属性指定的代码字符集。很少使用,浏览器不关心他的值

  • crossorigin:可选。配置相关请求的CORS(跨源资源共享)。默认不使用CORS.

    crossorigin =“anonymous”:配置文件请求不必设置凭据标志

    crossorigin =“use-credentials”:设置凭据标志,出站请求就会包含凭据

  • defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本有效

  • integrity:可选。允许比对接收到的资源和指定的加密签名以验证子资源完整性。若不匹配则报错不执行脚本。该属性可用于确保内容分发网络不会提供恶意内容

  • src:可选。表示包含要执行的代码的外部文件

  • type:可选。代替language。表示代码块中的脚本语言类型(MIME类型)

 

3.1.1 标签位置

      过去,所有<script>元素都放在也页面的<head>标签内,意味着必须把所有JavaScript代码都下载、解析和解析完成后,才开始渲染页面(页面在浏览器解析到<body>的起始标签时开始渲染)。对于需要很多JavaScript的页面,这会导致页面渲染的明显延迟,在此期间浏览器窗口完全空白。所以,现代web应用程序通常将所有JavaScript引用放在**<body>元素中的页面内容后面**,这样页面就会子啊处理JavaScript代码之前完全渲染页面。

 

3.1.2 推迟执行脚本

<script>的属性defer,表示脚本会被延迟到整个页面都解析完毕后再运行

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Document</title>
  <script defer src="exm1.js"></script>
  <script defer src="exm2.js"></script>
</head>
<body> 
</body>
</html>
  • 脚本按照出现的顺序执行
  • 两者都会在DOMContentLoaded事件之前执行
  • defer只对外部文件有效
  • 对于XHTML,指定defer属性时应该携程defer=“defer”

 

3.1.3 异步执行脚本

  • async和defer类似,都告诉浏览器立即下载。不过标记为async的脚本并不能保证能按照它们出现的次序执行。即第二个脚本可能先于第一个脚本执行。
  • 异步脚本保证会在页面load事件前执行,但可能会在DOMContentLoaded之前或者之后
  • 对于XHTML,async属性应该写为async=“async”

 

3.1.4 动态加载脚本

因为JavaScript可以使用DOM API。所以可以通过向DOM中动态添加script元素也可以加载指定脚本

let script = document.createElement('script');
script.src = 'exp.js';
script.async = false;
document.head.appendChild(script);
  • 默认情况下这种方式创建的 script 是以异步方式加载的,相当于添加了async属性。但会出现问题,因为所有浏览器都支持createElement()方法,但不是所有浏览器都支持async属性,所以要设置为同步加载

  • 以这种方式获取的资源对浏览器预加载器是不可见的。会严重影响他们在资源获取队列中的优先级。在文档头部显式声明,就可让预加载器知道这些动态文件的存在:

    <link rel="preload" href="exp.js">
    

 

3.2 行内脚本和外部脚本

3.2.1 行内式JS

<input type="button" value="cilck me" onclick="alert('Hello')"/>
  • 可将单行或少量JS代码写在HTML标签的事件属性中(以on开头的属性),如:onclick
  • 注意单双引号:HTML中推荐双引号,JS中推荐单引号
  • 可读性差,在html中编写JS大量代码时,不方便阅读
  • 引号易错,引号多层嵌套时,易混淆

 

3.2.2 内嵌JS

<script>
	alert('HELLO!');
</script>
  • 可以将多行JS代码写到script标签中

  • 若在代码中要出现</script>字符串,必须要在 / 前面加转义字符 \

3.2.3 外部JS文件

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

  • 利于HTML页面代码结构化,把大段JS代码独立到HTML页面之外,方便文件级别的复用
  • 引用外部JS文件的script标签中间不可以写代码,浏览器会忽略行内代码
  • 适用于JS代码量大的情况

使用外部文件的好处:

  • 可维护性
  • 缓存。浏览器会根据特定的设置缓存所有的外部链接的JavaScript。意味着若两个页面都要用到同一个文件,则该文件只需要下载一次。
  • 适应未来

 

3.3 文档模式(doctype)

分类:

  • 混杂模式
  • 标准模式
  • 准标准模式

 

3.4 确保JavaScript不能用是的用户体验

使用<noscript>,可以指定在浏览器不支持脚本时显示的内容,若浏览器支持并启用脚本,则<noscript>中任何内容都不会被渲染

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/150442.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!