JavaScript浏览器解析原理
发布日期:2021-08-11 02:51:22 浏览次数:2 分类:技术文章

本文共 1590 字,大约阅读时间需要 5 分钟。

首先,JavaScript的特点是:

  1. 跨平台

    可以再不同的操作系统上运行。

  2. 弱类型

    与之相对的是强类型

    强类型:在定义变量的时候,需要将变量的数据类型表明。例如:Java

    弱类型:定义变量的时候不需要定义数据类型,数据类型根据变量值来确定。例如:JavaScript

  3. 解释执行,逐行执行

其次,JavaScript在浏览器中的执行过程分为三步:

  1. 语法检测 

    主要看你的代码有没有基本的语法错误。例如:中文,关键字等等

  2. 词法分析(预编译) ----- 重点介绍

  3. 逐行执行

词法分析(预编译)

  主要分为两种情况(全局,函数)

  1. 全局(直接是script标签中的代码,不包括函数中的):

console.log(a);     //返回值:function a(){}
var a = 100;
console.log(a)      //返回值:100
var b = 200
var c = 300
function a(){

}
function fun(){

}

    1. 在函数执行前,会生成一个GO(global object)对象,这是一个看不到的对象,但是我们可以模拟出来分析。

GO = {}

    2. 分析变量声明,变量名为属性名,值为underfined

GO = {
a : undefined,
b : undefined,
c : undefined}

    3. 分析函数声明,函数名为属性名,值为整个函数体,如果函数名与变量名相同,那么变量名的值将被无情覆盖

GO = {
a : function a(){
},
b : undefined,
c : undefined,
fun : function fun(){
}}

    此时的GO对象就是预编译的最终结果。

    4. 逐行执行,分析过(变量声明、函数声明)不用管,只管赋值(变量赋值)

a赋了一次值,值改变为100 GO = {
a : 100,
b : undefined,
c : undefined,
fun : function fun(){
}}

  2 . 局部、函数执行时

var num = 100;function fun(num){

   var a = 10;
console.log(num);}fun(5)

    1. 预编译:先是全局

GO = {
num : undefined,
fun : function}
GO = {
num : 100,
fun : function}

    2. 然后逐行执行,到fun(5),函数调用,回生成自己的作用域AO(active object),函数调用时,在执行前的一瞬间产生,如果有多个函数调用,就会产生多个AO,并且各不干扰,各不相同。

fun.AO = {
}

    3. 分析参数,形参作为属性名,实参作为值

fun.AO = {
num : 5}

    4. 分析变量声明,变量名为属性名,值为underfined,如果遇到AO对象上属性同名,不去做任何改变

fun.AO = {
num : 5,
a : underfined}

    5. 函数声明,函数名为属性名,值为整个函数体,如果遇到AO对象上属性同名,则无情覆盖(没有跳过)

    6. 逐行执行,分析过(变量声明、函数声明)不用管,只管赋值(变量赋值)

fun.AO = {
num : 5,
a : underfined}

   最后的输出的为:5

两者在步骤上没有什么大的区别,只是函数多了形参与实参的那一步。

转载于:https://www.cnblogs.com/mercy-up/p/10133241.html

转载地址:https://blog.csdn.net/weixin_30609287/article/details/98634115 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Oracle子句【group by、having】
下一篇:windows下批量杀死进程

发表评论

最新留言

关注你微信了!
[***.200.74.241]2022年05月27日 16时38分45秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

华为鸿蒙中标麒麟,华为鸿蒙OS短时间内威胁不到麒麟操作系统和统信UOS系统 2019-08-20 03:55:28
鸿蒙手机品牌,你好,鸿蒙!首个第三方接入鸿蒙品牌出现,华为再也不孤单了!... 2019-08-20 03:55:28
android ontouchevent 坐标,android处理触摸事件(touchEvent)的详细流程 2019-08-20 03:55:27
mips-mti-gnu-linux,c – 关于MIPS的pthreads中的Segfault 2019-08-20 03:55:27
c语言int mark,C语言考前冲刺题 2019-08-20 03:55:26
linux中cd 破折号,何时以及如何在Unix / Linux中引入双破折号(-)作为选项定界符的结尾?... 2019-08-20 03:55:26
c语言开题报告中的文件与格式,大学论文开题报告格式要求.docx 2019-08-20 03:55:25
C语言分乘积最大数,很大的数相乘怎么办? 2019-08-20 03:55:25
vs2019怎么编译c语言代码GIt,VS2019中Git源代码管理实现总结 2019-08-20 03:55:24
c语言程序实训报告模板,C语言实训报告模板..doc 2019-08-20 03:55:24
c语言程序断点怎么打,C#中如何使用断点操作调试程序 2019-08-20 03:55:23
c语言迷宫问题输出坐标,c语言栈解决迷宫问题 2019-08-20 03:55:23
asus t100ha linux,华硕变形本怎么样 | 华硕变形本T100HA 好不好_什么值得买 2019-08-20 03:55:23
c语言 预处理指令有什么作用,C语言程序时经常使用库函数之前的预处理是什么?... 2019-08-20 03:55:22
江苏大学linux实验报告,2019江苏大学885 编程题 2019-08-20 03:55:22
linux cron实例,cron,linux定时实施工具详解及实例 2019-08-20 03:55:21
linux不识别usb,求助:USB无法识别 2019-08-20 03:55:21
ipad上linux终端,将 iPad 看作一个终端。 2019-08-20 03:55:21
linux 查看网卡压力,一种Linux系统下自动化测试网卡压力的方法与流程 2019-08-20 03:55:20
linux 内核 清中断,linux内核--中断和中断处理(一) 2019-08-20 03:55:20