浏览器解析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): 全部编译成机器码,统一执行. ...
随机推荐
- 一、使用官方工具建立空springboot
自己搭过springboot,看的官网,一点点自己弄,集成druid,做了些例子,从0到1弄了一下午. 当时没看到有工具可用,可以把依赖都加上,简称STS. 下载地址: htt ...
- php中的echo 与print 、var_dump 的区别
· echo - 可以输出一个或多个字符串 · print - 只允许输出一个字符串,返回值总为 1 提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1. ...
- 小程序开发 easy-less 配置
开发支付宝小程序, 不习惯直接写css 了,推动小程序的开发太低效,讲道理默认构建就应该支持less 和sass. vscode 有easy-less 插件,看下配置支持自定义扩展名. { &quo ...
- socket通信的遇到的问题1
/*使用select对fd可读写,格式*/ while(ctrl){ //// FD_ZERO(&readSocketSet); FD_SET(readSocketFd,&readSo ...
- 移动端适配--flexible.js
引言: H5适配一直是一个比较普遍的问题,很多文章都会讲,最近开发了一个H5的项目使用了一下淘宝的 flexible.js,写一篇文章自己总结一下. 一.背景介绍: Flexible.js是淘宝公开的 ...
- Ubuntu16.04调整屏幕分辨率至1920*1080
安装好ubuntu 16.04桌面版后,发现屏幕分辨率调整选项里没有1920*1080这一选项,经过一番查找,可通过如下方式进行屏幕分辨率设置.以下操作均在ubuntu 16.04桌面版操作,不要用远 ...
- 1#认识Java
Java是一种面对对象的编程语言. Java共分为三个体系:JavaEE.JavaSE.JavaMS Java SE 1: Java Platform Standard Edition,Java平台标 ...
- 爬虫-----爬取所有国家的首都、面积 ,并保存到txt文件中
# -*- coding:utf-8 -*- import urllib2import lxml.htmlfrom lxml import etree def main(): file = open( ...
- PHP----------php的opcache扩展配置参数介绍
[opcache]zend_extension = "路径/ext/php_opcache.dll" ; Zend Optimizer + 的开关, 关闭时代码不再优化.opcac ...
- java消息队列--ActiveMQ
1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...