深入理解Javascript的执行顺序

如果你不了解Javascript语言的运行机制,或者简单地说,你不能控制Javascript的执行顺序,那么你可以不处理bole Chollima,让马完全熄灭,到处跑。

那么Javascript是如何解析它的呢执行的顺序是什么在我们了解这一点之前,让我们先了解几个重要的术语:

1。块编码
Javascript中的一段代码是指由一个标签分隔的一段代码:
复制代码代码如下所示:

警报(这是一段代码);


警报(这是第二块);


js是用代码块编译和执行的,这些块是独立的,但是变量和方法是共享的:
复制代码代码如下所示:

警报(STR);由于没有定义STR,所以浏览器不会运行以下错误。
警报(我是代码块)。
var测试=我是代码块;


警报(我是代码块);
警报(测试);弹出 是一个代码块变量

在上面的代码中,代码块运行错误,但不影响代码块的执行。这是代码块之间的独立性,在代码块中可以调用的变量在块之间共享。

2,声明函数和赋值函数


js函数定义分为声明函数和赋值函数两类。
复制代码代码如下所示:

函数(FN){声明函数

}

函数赋值函数

}

声明函数和赋值函数之间的区别是,在编译时期的JS,陈述功能将首先被提取出来,然后JS代码会按顺序执行。

3,预编码周期和执行周期


事实上,js的解析过程分为预编码周期(预处理)和执行周期两个阶段。

JS预编译所有报表该代码块中的变量和函数处理(类似于C语言的编译器),但需要注意的是,处理函数声明的函数和变量是重要的,但不是唯一的一个声明中初始化和赋值。
复制代码代码如下所示:

(FN);结果:实现函数2
函数(FN){函数1
警报(函数1);
}

函数(FN){函数2
警报(函数2);
}


(FN); / /结果:在预编译语句周期函数和处理实施陈述功能,所以即使FN()在函数的声明的函数调用也可以执行。
函数(FN){声明函数
警报(执行声明函数);
}

Var(FN =函数)赋值函数
警报(执行赋值函数);
}


一个代码块

警报(STR)、浏览器错误,但没有弹出窗口信息。

代码块2

警报(STR);未定义
var;

/ / js声明的变量在预处理阶段,但它没有初始化和赋值,所以代码块2中的变量unfiened,和代码的一个变量是完全不存在的,所以浏览器未能报告。

理解上面的条件,我相信您对JS的运行机制有一个大致的印象,现在让我们来看一个例子:
复制代码代码如下所示:

(Fn);浏览器错误:未定义


函数(FN){函数1
警报(函数1);
}


为什么运行上面的代码浏览器是错误的呢在预处理期间,声明函数是否被处理,它怎么找不到FN()函数事实上,这是后期的理解,我们上面所说的,JS引擎是在顺序执行的代码块中,根据事实,应该按照完整的代码块执行预处理和预处理,即只执行的代码块,函数和变量的声明和代码块没有被加载,没有预处理,这是边缘的编译器的核心处理。

现在,让我们总结一下。
复制代码代码如下所示:
步骤1。读取第一个代码块。
步骤2。做语法分析,并作出错误报告的语法错误(例如括号不匹配等),跳到第五。
Step 3. 预编译的变量的声明和函数定义(它永远是错的,因为只有正确的声明解析)。
步骤4。执行代码段,错误是错误的(如变量未定义)。
步骤5,如果有下一个代码段,读入下一个代码段,重复步骤。
第六步。结束。

根据HTML文档流的执行顺序,在呈现页面元素之前需要执行的JS代码应该放在前面的代码块中。在那之后,JS放置在元件后的页面元素加载,和body标签的onload事件执行最后。
复制代码代码如下所示:

警报();
函数FN(){
警报(第三);
}





警报();