变量提升

​ 解析 > 编译 > 执行

在解析阶段,JS会检查语法,并对函数进行预编译。 接下来是执行阶段,这个阶段没什么好讲的,就是逐条解释每条语句并执行。

提高性能

解析的过程中,还会为函数生成预编译代码。在预编译时,会统计该函数声明了哪些变量、创建了哪些函数(注:这里就是声明提升),并对函数的代码进行压缩,去除注释、不必要的空白等。这样做的好处是每次执行函数时都可以直接为该函数分配栈空间(不需要再解析一遍去获取函数中声明了哪些变量,注:这也是声明提升的好处),并且代码执行更快(因为压缩而变短了)。两个好处都会提高执行函数的性能。

容错性好

  1. 解析和预编译过程中的声明提升可以提高性能,让函数可以在执行时预先为变量分配栈空间

  2. 声明提升还可以提高JS代码的容错性,使一些不规范的代码也可以正常执行

var a =2;

拆分成

var a;  //编译阶段,找到所有的声明,并用合适的作用域将他们关联起来
a=2;    //赋值阶段,编译阶段以后执行

推荐文章

js中为什么要进行变量提升?

深入理解JavaScript的变量提升(Hoisting)