JavaScritpt解析和执行过程介绍
javascipt是一种描述型的脚本语言,是一种解析语言,由浏览器动态解析,不同种类浏览器不同版本的浏览器对js的解析有着微小的差别,不同浏览器js解析引擎效率也有高低。
js的执行过程分为两大部分:
第一部分,解析过程,也称预编译期。主要工作就是对js代码中声明的所有变量进行预处理。需要注意的是,在此进行处理的仅是声明函数,而对于变量的处理仅是声明,并开辟出一块内存空间,不进行赋值操作。
第二部分,执行过程,在执行过程中,浏览器的js引擎对每块代码进行顺序执行,如果有外部引用的js,且js有相互关联,此时就要注意,不同的js的引入顺序,如果声明代码块在调用代码块后调用则将不会达到预期效果。
总的来说,js的执行分为两部分,解析过程和执行过程。解析时按照代码代码块,一段一段进行解析,执行时按照代码块顺序逐行执行,解析一个代码块执行一个代码块。
因为是解释性语言,所以js如果在解析过程中有错误,则不会提示,也可以理解为js不会出现编译错误,但如果出现了运行时错误。
var ad;//预处理阶段处理
ad = 1;//运行时赋值
function text(){
console.log(1);
if(ad){
//boolea
}
}
为什么变量是在运行时赋值的而不是在预处理阶段进行赋值?
因为javascript的变量的数据类型不是固定的,要根据当前运行的情况的判定。
全局预处理阶段
预处理:创建一个词法环境(LexicalEnvironment,在后面简写成LE),扫描JS中的用声明的方式声明函数,用var定义的变量并将他们加到预处理阶段中的词法环境中去。
预处理阶段先读取代码块,不是一行一行的解析执行定义的方法和var定义的变量,会放到一个(不同的环境,会有对应语法的环境)词法环境中
var a = 1;
var b;
c = 3;
function d(){
console.