浏览器解析JavaScript的原理
JavaScript的特点一般都知道的就是解释执行,逐行执行,就是从上到下依次执行。
JavaScript的执行之前,其实还是有一些操作的,只是没有表现出来
JavaScript的执行过程:
1、语法检测 首先是大致查看有没有基本的语法错误。比如说中文、关键字错误等等
2、词法分析(预编译)
3、逐行执行
预编译的过程
1、先全局 直接是 script 标签里的代码,函数除外
预编译时
1、先模拟一个GO(global object) = { };
2、分析变量声明(var) 若有则:GO = {变量名1:undefined,变量名2:undefined,……};若遇到同名的就覆盖
3、分析函数声明(function) 若有则:GO = {变量名1:undefined,变量名2:undefined,……,函数名1:函数体1,函数名2:函数体2,……};若遇到同名的就覆盖
4、逐行执行 有赋值就赋值到GO里相应的属性
2、再局部 在逐行执行时 若遇到函数调用,该函数会生成自己的作用域AO(active object) = { }
1、模拟一个AO = { }
2、分析参数 若有则:AO = {形参 1: 实参1,形参 2: 实参2,…… }
3、分析变量声明 若有则:AO = {形参 1: 实参1,形参 2: 实参2,…… 变量名1:undefined,变量名2:undefined,……};若遇到同名的就跳过
4、分析函数声明 若有则:AO = {形参 1: 实参1,形参 2: 实参2,…… 变量名1:undefined,变量名2:undefined,……,函数名1:函数体1,函数名2:函数体2,……};若遇到同名的就覆盖
5、逐行执行 有赋值就赋值到AO相应的属性,若遇到AO里没有的要赋值的,就向上一级找,一直找到GO,若GO没有,就添加到GO。
基础步骤就是这,一步一步的来,就没有什么大问题。
浏览器解析JavaScript的原理的更多相关文章
- 浏览器解析JavaScript原理
1.浏览器解析JavaScript原理特点: 1.跨平台 2.弱类型 javascript 定义的时候不需要定义数据类型,数据类型是根据变量值来确定的. var a = 10; 数字类型 ...
- 浏览器中JavaScript执行原理
本章我们讨论javascript在浏览器中是如果工作的,包括:下载.解析.执行的全过程.javascript的这些讨人嫌的地方我们是知道的: i.需要串行下载 ii.需要解析 iii.需要串行执行 而 ...
- JavaScript运行原理解析
原文:1.http://blog.csdn.net/liaodehong/article/details/50488098 2.Stack的三种含义 (阮一峰) 3. http://lib.csdn. ...
- How Javascript works (Javascript工作原理) (十四) 解析,语法抽象树及最小化解析时间的 5 条小技巧
个人总结:读完这篇文章需要15分钟,文章介绍了抽象语法树与js引擎解析这些语法树的过程,提到了懒解析——即转换为AST的过程中不直接进入函数体解析,当这个函数体需要执行的时候才进行相应转换.(因为有的 ...
- 解析Javascript事件冒泡机制
本资源引自: 解析Javascript事件冒泡机制 - 我的程序人生 - 博客频道 - CSDN.NET http://blog.csdn.net/luanlouis/article/details/ ...
- 深入理解JavaScript Hijacking原理
最近在整理关于JavaScript代码安全方面的资料,在查关于JavaScript Hijacking的资料时,发现关于它的中文资料很少,故特意整理一下. 一.JavaScript Hijacking ...
- JavaScript内部原理实践——真的懂JavaScript吗?(转)
通过翻译了Dmitry A.Soshnikov的关于ECMAScript-262-3 JavaScript内部原理的文章, 从理论角度对JavaScript中部分特性的内部工作机制有了一定的了解. 但 ...
- How Javascript works (Javascript工作原理) (三) 内存管理及如何处理 4 类常见的内存泄漏问题
个人总结: 1.两种垃圾回收机制: 1)引用标记算法:如果检测到一个对象没有被引用了,就清除它. ***这种算法不能处理循环引用的情况*** 2)标记—清除算法:从根(全局变量)开始向后代变量检测,任 ...
- How Javascript works (Javascript工作原理) (二) 引擎,运行时,如何在 V8 引擎中书写最优代码的 5 条小技巧
个人总结: 一个Javascript引擎由一个标准解释程序,或者即时编译器来实现. 解释器(Interpreter): 解释一行,执行一行. 编译器(Compiler): 全部编译成机器码,统一执行. ...
随机推荐
- 学习ActiveMQ(一):安装与启动
一:简单介绍 AvtiveMQ是Apaceh所研发的一个开源消息中间件,用来在服务与服务之间进行异步通信,是基于JMS规范的.activemq包含发送者(sender).消息(message).队列( ...
- 【转】tars源码漫谈第1篇------tc_loki.h (牛逼哄哄的loki库)
loki库是C++模板大牛Andrei写的, 里面大量运用模板的特性, 而tc_loki.h借用了loki库的部分代码, 形成了一个基本的文件tc_loki.h, 来看看: #ifndef __TC_ ...
- 魔方---java
package LMS; import java.awt.AWTException;import java.awt.Robot;import java.awt.event.InputEvent;imp ...
- python学习笔记5-字典
# 字典(哈希映射.关联数组) d0 = {'a': 2, [0,1]:[1,2,3]} # TypeError: unhashable type: 'list' # 值可以是任意数据类型,但键不能是 ...
- 训练集(train set),验证集(validation set)和测试集(test set)
把数据集分为三部分,分别为:训练集(train set),验证集(validation set)和测试集(test set). 具体比例有各种说法.待补充 测试集是为了测模型泛化能力,不能在训练的时候 ...
- TextField widgets require a Material widget ancestor
TextField widget需要被包裹在Scaffold widget中,否则会报错
- Centos7 Lnmp的环境搭建
centos 版本 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 关闭防火墙 sy ...
- IIS部署Angular2
因為Angular無刷新的特性,所以瀏覽器地址欄上的網址其實不會真實映射到磁盤的特定位置,所以我們需要安裝.Rewrite Module, 如下: Web.config 如下: <?xml ve ...
- asp.net 经常用到需要判断文本框是否输入的数字是小数,有无正负,几位小数,可以封装一起判断
/// <summary> /// 判断是否为小数点数字且带符号 /// </summary> /// <param name="symbol"> ...
- 【JavaScript】事件捕获、事件冒泡与事件委托
2018年12月18日 最近在学习js时,遇到了三个名词:事件捕获.事件冒泡.事件委托. 一.事件捕获和事件冒泡 事件捕获和事件冒泡是为了解决网页中的事件流(事件发生的顺序)而提出的概念. 事件捕获是 ...