图解JavaScript

简介: JavaScript是web前端开发的必备技能之一,在如今各种JS框架满天飞,我们如何选择并应用成了困扰,而且最头疼的是那么多浏览器与那么多的版本让应用的兼容性也成了前端的难题。

JavaScript是web前端开发的必备技能之一,在如今各种JS框架满天飞,我们如何选择并应用成了困扰,而且最头疼的是那么多浏览器与那么多的版本让应用的兼容性也成了前端的难题。本文是我对JS学习与工作使用的一个总结,从理论的角度剖析JS。

BOM(浏览器对象模型)

由于web开发中JS是运行在浏览器中的,而浏览器会提供一个API的形式让JS可以访问到一些属性,就样就产生了浏览器对象模型,包括窗口、访问记录、显示屏、浏览器、当前访问地址等相关信息,如下:


Window对象是JS中的顶级对象,window是其引用,JavaScript是一个纯粹的面向对象语言,在JS中一切皆对象,JS对象有一种专用的描述形式:JSON,JSON如今在其他语言中也变的通用了。window中对其他的BOM又有了引用,例如对Location的引用:window.location,如果我们想改变当前地址,只要给location的href重新赋值就可以了,因为location是Location的引用,而Location代表的就是当前访问地址。

Window对象

对于一个iframe其实也是一个window对象,而iframe的parent则是iframe外的窗口的引用,有关window的引用关系如图:


DOM(文档对象模型)

Document对象是窗口中的页面对象,在JS中对应成了文档,因为是XML的形式,Document对象其实是一棵树,里页包含了所有页面元素相关的,JS可以通过Document对象来操作页面,document是Document的引用,document是window的属性,所以可以通过window.document来访问对象的属性及方法。document里是一个个的element(元素),每个element又包含了很多attribute,每个attribute又包含了name和value。我们平常在页面上见到的a闭合标签、div闭合标签就是element对象,a标签里的href就是一个attribute,name是href,value就是URL。如图是Chrome43浏览器中从console中看的document对象:


一个element中包含了许多属性,如图是一个a标签里的一些属性:


Document的状态

浏览器在生成文档对象时会经过不同的状态,如图是我手动抓取的,但还有两个状态由于时间持续很短没能抓取到:

实际的状态流转是:

对于想要延迟加载的内容,可以通过监听document的状态变化来实现。

document的方法

目前比较流行的JS框架中的Jquery里的核心功能就是选择器,这些选择器是如何实现的呢,以jquery-1.8.2.js为例,我们看源码:


使用的document的getElementById的方法,由于ID是唯一的,所以这个方法查询的效率相对其他方法更快些,还有哪些方法?


getElementByClassName这个方法在IE8及以下是没有的,运行时你会发现如下的错误:


样式表

样式表在document里是什么样的呢?首先来看各元素是什么样子的吧:

可以看出一个很明显的树状结构,我们来看一下body的样式,其实是一个样式数组:


而这些样式名又对应规则树中具体的规则,样式规则树如图:


事件、作用域、闭包与事件传播机制

原生的事件是每个element里面的属性,如图是一个img元素的onerror属性,也就是图片下载失败的处理事件:


可以看到这个事件的处理函数的最下面有一个<function scope>,这是function的作用域链,里面包括了各个作用域,作用域其实也是对象,包括element对象,图中可以看出的作用域有img、window、document,还有一个Closure(闭包),Closure是JS中为了保证变量在其他地方引用时不被垃圾回收的一种机制,通常是一个function就是一个Closure。说到JS的对象回收机制,和引用有关,但也不是有引用了就不回收,例如孤岛对象,当然没被引用的是要回收的。

JS的事件传播机制:事件冒泡机制,如图:

子树结点上的事件会一直往上传播,除非我们用stopPropagation方法阻止不再传播,有这么个情况,如果在a标签绑定了某类型事件的处理,在父结点的div上又绑了一个同类型,如果在a上执行完不阻止的话,在div上就会又执行一次,造成了多次执行的后果。然而这种传播机制又有另一种好处,就是事件可以委托给上级处理,这样绑定事件处理函数时只需要绑定在上级对象上,新增子结点时事件的处理同样生效,就不用对新增的结点再绑定了,很多JS框架也是这么做的。

prototype

可以看到每个对象都有一个prototype属性,打开看下原来是指向父对象的,这其实是JS里的继承,而prototype其实是对父对象的引用。

MVVM

目前流行的JS框架越来越多,以选择器为核心的Jquery,还有根本看不到选择器的Angular,类似Angular的Avalon,Jquery就不多说了,来看下Angular吧,先看下在HTML怎么用的:


我框起来的部分其实在JS文件里都有对应的,这一个表单提交,如果用Jquery是会有用选择器的,但是在JS里却看不到选择器:


上手还是挺简单的,代码量也少,代码也比较清晰,也便于维护,类似的框架还有很多。

从我的角度来说,框架其实是一种工具,对于手机HTML5中我们还是要对框架的大小多慎重的,比如在手机上用Zepto肯定比用JQuery要好,Zepto兼容JQuery,但体积小很多,Zepto裁减了很多H5并不用的功能。

小结

往后发展,框架肯定是往更加精细的模块发展,拆的更多更具有针对性,用了才加载,更加轻量。

目录
相关文章
|
JavaScript 前端开发 容器
学习JavaScript笔记
学习JavaScript笔记
70 0
|
JavaScript 前端开发 算法
Javascript 学习 笔记三
1、Javascript 组成: ECMAScript--JavaScript的核心,描述了语言的基本语法和对象。DOM(文档对象模型)--The Document Object Model描述了作用于网页内容的方法和接口。document的操作,比如: var lis = document.getElementsByTagName('li'); BOM(浏览器对象模型):The Brow
1078 0
|
测试技术
需求管理之被遗忘的需求
       先说一个小笑话。有一个生产队队长,他对专家说:“现在我们生产队的地越来越多,牛越来越忙不过来了。
893 0
|
9天前
|
调度 云计算 芯片
云超算技术跃进,阿里云牵头制定我国首个云超算国家标准
近日,由阿里云联合中国电子技术标准化研究院主导制定的首个云超算国家标准已完成报批,不久后将正式批准发布。标准规定了云超算服务涉及的云计算基础资源、资源管理、运行和调度等方面的技术要求,为云超算服务产品的设计、实现、应用和选型提供指导,为云超算在HPC应用和用户的大范围采用奠定了基础。
179602 21
|
1天前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
对话 | ECS如何构筑企业上云的第一道安全防线
|
18天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
9499 25
|
3天前
|
机器学习/深度学习 分布式计算 供应链
阿里云先知安全沙龙(上海站) ——大模型基础设施安全攻防
大模型基础设施的安全攻防体系涵盖恶意输入防御和基础设施安全,包括框架、三方库、插件、平台、模型和系统安全。关键漏洞如CVE-2023-6019(Ray框架命令注入)、CVE-2024-5480(PyTorch分布式RPC)及llama.cpp中的多个漏洞,强调了代码安全性的重要性。模型文件安全方面,需防范pickle反序列化等风险,建议使用Safetensors格式。相关实践包括构建供应链漏洞库、智能化漏洞分析和深度检测,确保全方位防护。
|
6天前
|
JSON 分布式计算 数据处理
加速数据处理与AI开发的利器:阿里云MaxFrame实验评测
随着数据量的爆炸式增长,传统数据分析方法逐渐显现出局限性。Python作为数据科学领域的主流语言,因其简洁易用和丰富的库支持备受青睐。阿里云推出的MaxFrame是一个专为Python开发者设计的分布式计算框架,旨在充分利用MaxCompute的强大能力,提供高效、灵活且易于使用的工具,应对大规模数据处理需求。MaxFrame不仅继承了Pandas等流行数据处理库的友好接口,还通过集成先进的分布式计算技术,显著提升了数据处理的速度和效率。
|
22天前
|
Cloud Native Apache 流计算
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
5155 15
资料合集|Flink Forward Asia 2024 上海站
|
1月前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。