JavaScript的预编译与执行
是一种描述型脚本语言,是由浏览器进行动态地解析与执行,不同于Java或C等编译性语言,不需要提前进行编译生成中间结果。事实上,引擎执行js:语法分析、预编译期(预处理)与执行期。
- 就是引擎检查你的代码有没有什么低级的语法错误;
- 预编译期JS会对本代码块中的所有声明的变量和函数进行处理(类似与C语言的编译)
- 此时处理函数的只是声明式函数(例如:function p(x){console.log(x)})
- 全局变量声明,变量也只是进行了声明但未进行初始化以及赋值。
- 匿名函数不参与预编译,只有在解释执行阶段才会进行变量初始化。
- 执行代码
- JS引擎是按照代码块来进行预处理和执行的,也就是说预处理的只是执行到的代码块的声明函数和变量,这也是边编译边处理的道理。
代码缓存
为了加快某个js文件的执行速度可以将该js第一次的编译结果保存在文件中。在之后的运行中直接使用编译结果。该技巧可以有效提高js文件依赖多的应用的响应时间;
在使用这种技巧时,需要注意:
- 是否是对全部js文件执行;
- 是否生成了编译结果;
- 是否使用了编译结果;
- 源文件更新后使用新源文件、并且同时生成新的cache(codecache 日期不匹配失效);