JavaScript 执行过程

219 阅读2分钟

1首先会下载js包, 2、开始边编译边执行,编译就是转成计算机能识别的二进制,

3、编译之前先会词法解析,解析成对应单元也就是token,遇到声明会在当前作用域下创建内存空间默认为undefined,实际相当于创建属性。如果不是var则直接过去

4、运行的时候没有当前作用域没有创建作用域链,则会在全局作用域创建当前属性,并赋值

4、然后编译,运行

javascript是解释型语言,自然就是编译一行,执行一行。js运行过程分为三步:1、语法分析 2、预编译 3、解释执行。预编译期JS会对本代码块中(作用域块)的所有声明的变量和函数进行处理 (类似与C语言的编译),但需要注意的是此时处理函数的只是声明式函数,而且变量也只是进行了声明但未进行初始化以及赋值。

一、语言分析 ​ JS 会对全部的脚本代码进行解析,通过jS引擎检查你的代码是否存在错误,如果有格式错误就会抛出一个错误;否者语言分析完成。

二、预编译 ​ 全局创建

​ 1、创建GO空对象

​ 2、变量声明提升 赋值undefined

​ 3、函数声明提升 并把函数体赋值

当有函数准备执行时:编译函数方法体 局部作用域 ​ 1、建立AO空对象

​ 2、变量提升

​ 2.1形参声明提升 赋值undefined

​ 2.2实参声明提升、变量声明提升 赋值undefined

​ 2.3实参形参相统一

​ 3、函数声明提升 并把函数体赋值

三、方法体解析执行 当执行 a = 23,AO对象、GO对象中都没有var a,则会在GO对象中创建一个a:23;且解析执行完毕并不销毁

解析执行完毕AO对象销毁

页面关闭GO对象销毁

注意:在解析执行中 AO才开始创建 1 只有存在作用域的时候才会用预编译 2 es5之前 每个作用域都需要预编译 3对于同一作用域一定是先预编译在执行 不同作用域之间不存在编译和执行顺序的