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的原理的更多相关文章

  1. 浏览器解析JavaScript原理

    1.浏览器解析JavaScript原理特点: 1.跨平台 2.弱类型 javascript 定义的时候不需要定义数据类型,数据类型是根据变量值来确定的.    var a = 10; 数字类型    ...

  2. 浏览器中JavaScript执行原理

    本章我们讨论javascript在浏览器中是如果工作的,包括:下载.解析.执行的全过程.javascript的这些讨人嫌的地方我们是知道的: i.需要串行下载 ii.需要解析 iii.需要串行执行 而 ...

  3. JavaScript运行原理解析

    原文:1.http://blog.csdn.net/liaodehong/article/details/50488098 2.Stack的三种含义 (阮一峰) 3. http://lib.csdn. ...

  4. How Javascript works (Javascript工作原理) (十四) 解析,语法抽象树及最小化解析时间的 5 条小技巧

    个人总结:读完这篇文章需要15分钟,文章介绍了抽象语法树与js引擎解析这些语法树的过程,提到了懒解析——即转换为AST的过程中不直接进入函数体解析,当这个函数体需要执行的时候才进行相应转换.(因为有的 ...

  5. 解析Javascript事件冒泡机制

    本资源引自: 解析Javascript事件冒泡机制 - 我的程序人生 - 博客频道 - CSDN.NET http://blog.csdn.net/luanlouis/article/details/ ...

  6. 深入理解JavaScript Hijacking原理

    最近在整理关于JavaScript代码安全方面的资料,在查关于JavaScript Hijacking的资料时,发现关于它的中文资料很少,故特意整理一下. 一.JavaScript Hijacking ...

  7. JavaScript内部原理实践——真的懂JavaScript吗?(转)

    通过翻译了Dmitry A.Soshnikov的关于ECMAScript-262-3 JavaScript内部原理的文章, 从理论角度对JavaScript中部分特性的内部工作机制有了一定的了解. 但 ...

  8. How Javascript works (Javascript工作原理) (三) 内存管理及如何处理 4 类常见的内存泄漏问题

    个人总结: 1.两种垃圾回收机制: 1)引用标记算法:如果检测到一个对象没有被引用了,就清除它. ***这种算法不能处理循环引用的情况*** 2)标记—清除算法:从根(全局变量)开始向后代变量检测,任 ...

  9. How Javascript works (Javascript工作原理) (二) 引擎,运行时,如何在 V8 引擎中书写最优代码的 5 条小技巧

    个人总结: 一个Javascript引擎由一个标准解释程序,或者即时编译器来实现. 解释器(Interpreter): 解释一行,执行一行. 编译器(Compiler): 全部编译成机器码,统一执行. ...

随机推荐

  1. Vue2.2版本学习小结

    一.项目初始化继续参考这里 https://github.com/vuejs-templates/webpack-simple 或者 https://github.com/vuejs-template ...

  2. 在linux服务器下JMeter如何执行jmx性能脚本

    准备环境:linux平台.jmeter安装包. jdk   一. 安装jdk        jdk的安装可以参考以下内容        http://jingyan.baidu.com/article ...

  3. windows red5相关

    red5部署 前段时间把red5服务器搭建好了,现在记录下是如何搭建的.1,下载对应版本的red5https://github.com/Red5/red5-server/releases2,如果没有安 ...

  4. MongoDB操作集

    官网 https://www.mongodb.com/download-center#community 基本资料: http://www.runoob.com/mongodb/mongodb-int ...

  5. 两个ArrayList之间求交并补

    class ArraylistCalculate{ // 两个整数集求差集 public ArrayList<Integer> integerArrayListDifference( Ar ...

  6. selenium常用操作

    1.访问页面获得源码 browser.get(url) browser.page_source 2.查找单个元素:返回一个标签 find_element_by_id  ==>id选择器 find ...

  7. DOS特殊字符转义方法

    http://www.robvanderwoude.com/escapechars.php 期望得到的字符 转义后字符 说明 % %% May not always be required in do ...

  8. Windows SFTP 的安装

    用于Windows系统的免费SFTP服务器-Free SFTP Servers 前不久,有人问我:“怎么从 Linux 系统传文件到 Windows 服务器,不能用 FTP 协议.” 文件数量不大.用 ...

  9. MFC DDX_Control 与 DDX_Text

    DDX_TEXT()的作用可以理解为把字符串变量和控件的文本(WindowText)关联起来, DDX_Control()的作用可以理解为把变量和控件本身关联起来, DoDataExchange(pD ...

  10. 安装rosetta2016时出现git@172.16.25.11s password: \r\nPermission denied错误,解决方法。

    当在source目录执行 ./external/scons-local/scons.py -j8 mode=release bin 时,报错 git@.11s password: \r\nPermis ...