JavaScript已经在实际工作中已经用很久了,只是发现一直没有系统的学习过。所以这次本着带问题看书的想法通过JavaScript忍者秘籍学习一下JavaScript。
什么是ECMAScript?与JavaScript有什么关系?
ECMA是European Computer Manufacturers Association的简称,即欧洲计算机制造商协会
-既然是协会-那就应该联想到是标准定制者
ECMAScript是由协会通过的标准化脚本程序设计语言。而JavaScript 是ECMAScript的实现和扩展。
一张图可以说明他们之间的关系
ECMAScript:描述语法和基本对象(语法、类型、语句、关键字、保留字、运算符、对象)
DOM:描述处理网页内容的方法和接口,将整个页面规划成由节点层级构成的文档
BOM:描述与浏览器进行交互的方法和接口(弹出新窗口、调整窗口大小、cookie支持等)
JS已经有最新特性,而用户还在使用老旧的浏览器怎么办?
解决这个问题的方式就是使用转换编译器,例如Traceur、Babel,这类工具能够将最前沿的js代码转换为等价或相似的能在当前浏览器中运行的代码。
JavaScript api的核心组成部分是什么?
web生命周期一览
其中,2-3为客户端请求,服务器端发送响应阶段;4-浏览器处理响应,并构建页面;5-6监控客户端事件并处理。一个客户端web应用的生命周期从输入链接或单击链接开始,关闭web页面结束。
页面构建阶段从浏览器接收页面代码开始,分为HTML解析、DOM构建以及JavaScript代码执行。
若浏览器在页面构建阶段遇到脚本元素,会停止HTML到DOM的构建,开始执行js代码。此时,js应用仍然保持全局状态,以备后面再次遇到脚本元素,保持全局变量能被整个页面的代码正常访问到。当浏览器处理完所有的HTML元素,页面构建阶段结束,进入事件处理阶段。
js代码是由什么执行的?有什么目的?
所有包含在脚本元素中的js代码由浏览器的js引擎执行,例如FireFox的Spidermonkey引擎、chrome和opera的V8引擎、IE的chakra引擎
js代码的主要目的是用于加载动态页面,浏览器通过全局对象window提供了一个api供js引擎交互。
js处理哪些事件?
1.浏览器事件 -页面加载或无法加载
2.网络事件 -服务器响应
3.用户事件 -鼠标、键盘输入
4.计时器事件 -timeout时间到期或又触发一次时间间隔
关于window全局对象
window对象代表一个页面的窗口。可以获取其他全局对象、全局变量和浏览器api的访问途径。window对象的最重要属性是document,代表当前的DOM。
这是一个查看web api的在线文档,可以通过它来查找浏览器内置对象和函数。
https://developer.mozilla.org/zh-CN/docs
事件处理
事件处理执行逻辑:单线程+异步
浏览器执行环境的核心思想基于:同一时刻只能执行一个代码片段,即单线程。处理顺序为事件生成的顺序。
注册事件处理器
当事件发生时,浏览器调用响应的事件处理器,由于事件处理单线程,同一时刻只能处理一个事件。
两种方式:
1. 通过函数赋给某个特殊属性
window.open = function(){}
2. 通过内置addEventListener
window.addEventListener('click',function(){ });