zoukankan      html  css  js  c++  java
  • 浏览器解析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。

        基础步骤就是这,一步一步的来,就没有什么大问题。

    突然想到这个问题,然后找了一下,觉得介绍的比较通俗易懂----------------------------------》传送阵:https://www.cnblogs.com/long-z/p/10136657.html

  • 相关阅读:
    POJ 3710 Christmas Game#经典图SG博弈
    POJ 2599 A funny game#树形SG(DFS实现)
    POJ 2425 A Chess Game#树形SG
    LeetCode Array Easy 122. Best Time to Buy and Sell Stock II
    LeetCode Array Easy121. Best Time to Buy and Sell Stock
    LeetCode Array Easy 119. Pascal's Triangle II
    LeetCode Array Easy 118. Pascal's Triangle
    LeetCode Array Easy 88. Merge Sorted Array
    ASP.NET MVC 学习笔记之 MVC + EF中的EO DTO ViewModel
    ASP.NET MVC 学习笔记之面向切面编程与过滤器
  • 原文地址:https://www.cnblogs.com/jockr/p/11131071.html
Copyright © 2011-2022 走看看