饥人谷技术博客

Lesson One — JavaScript

2017-08-22  本文已影响37人  取个帅气的名字真好

一、什么是JavaScript


JavaScript 是一种具有面向对象能力的、解释型的程序设计语言。更具体一点,它是基于对象和事件驱动并具有相对安全性的客户端脚本语言 。因为他不需要在一个语言环境下运行,而只需要支持它的浏览器即可。它的主要目的是,验证发往服务器端的数据、增加 Web 互动、加强用户体验度等。

二、JavaScript的特点


松散性

JavaScript 语言核心与 C、C++、Java 相似,比如条件判断、循环、运算符等。但,它 却是一种松散类型的语言,也就是说,它的变量不必具有一个明确的类型。

对象属性

JavaScript 中的对象把属性名映射为任意的属性值。它的这种方式很像哈希表或关联数 组,而不像 C 中的结构体或者 C++、Java 中的对象。

继承机制

JavaScript 中的面向对象继承机制是基于原型的,这和另外一种不太为人所知的 Self 语 言很像,而和 C++以及 Java 中的继承大不相同。

三、JavaScript 历史


基本语法:借鉴C语言和Java语言。
数据结构:借鉴Java语言,包括将值分成原始值和对象两大类。
函数的用法:借鉴Scheme语言和Awk语言,将函数当作第一等公民,并引入闭包。
原型继承模型:借鉴Self语言(Smalltalk的一种变种)。
正则表达式:借鉴Perl语言。
字符串和数组处理:借鉴Python语言。

为了保持简单,这种脚本语言缺少一些关键的功能,比如块级作用域、模块、子类型(subtyping)等等,但是可以利用现有功能找出解决办法。这种功能的不足,直接导致了后来JavaScript的一个显著特点:对于其他语言,你需要学习语言的各种功能,而对于JavaScript,你常常需要学习各种解决问题的模式。而且由于来源多样,从一开始就注定,JavaScript的编程风格是函数式编程和面向对象编程的一种混合体。

Netscape公司的这种浏览器脚本语言,最初名字叫做Mocha,1995年9月改为LiveScript。12月,Netscape公司与Sun公司(Java语言的发明者和所有者)达成协议,后者允许将这种语言叫做JavaScript。这样一来,Netscape公司可以借助Java语言的声势,而Sun公司则将自己的影响力扩展到了浏览器。

之所以起这个名字,并不是因为JavaScript本身与Java语言有多么深的关系(事实上,两者关系并不深),而是因为Netscape公司已经决定,使用Java语言开发网络应用程序,JavaScript可以像胶水一样,将各个部分连接起来。当然,后来的历史是Java语言的浏览器插件失败了,JavaScript反而发扬光大。

四、ECMAScript的诞生


五、ECMAScript的发展


六、JavaScript 核心


1.核心(ECMAScript)
2.文档对象模型 (DOM)
3.浏览器对象模型 (BOM)


七、浏览器渲染机制


主要流程 .png

1、解析 HTML 标签, 构建 DOM 树
2、解析 CSS 标签, 构建 CSSOM 树
3、把 DOM 和 CSSOM 组合成 渲染树 (render tree)
4、在渲染树的基础上进行布局, 计算每个节点的几何结构
5、把每个节点绘制到屏幕上 (painting)

一、DOM解析

解析由两部分组成:标记化和树构建


DOM.png

DOM Tree解析如下:


html.png

二、css解析

css.png

八、JavaScript在 HTML 中如何放置


一、把JavaScript文件放在head中

<head>
<script type="text/javascript" src="style.js"></script>
</head>

JavaScript文件外部加载的好处

1.避免使用<! -- ... // -->,骇客技术。
2.避免使用CDATA。
3.统一定义JavaScript代码,方便查看,方便维护。
4.使代码更安全,可以压缩,加密单个JavaScript文件。
5.浏览器可以缓存JavaScript文件,减少宽带使用(当多个页面同时使用一个JavaScript文件的时候,通常只需下载一次)。

二、把JavaScript文件放在body前

为防止网页加载缓慢,也可以把非关键的JavaScript放到网页底部,例如下面的代码:

   <script type="text/javascript" src="style.js"></script>
</body>
</html>

九、白屏和 FOUC


首先
白屏:
FOUC(无样式内容闪烁):

十、异步加载脚本


1、async : 脚本延迟到文档解析和显示后执行,有顺序

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

有 async,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)。

2、defer:不保证顺序

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

有 defer,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成。



上一篇 下一篇

猜你喜欢

热点阅读