JS 预编译
第一步: 语法分析 第二步: 预编译 第三步: 解释执行 1. 语义分析 语义分析是通篇执行的一个过程。不如有一篇代码,在执行时是解析一行执行一行,但在执行之前系统执行的第一步它会扫描一遍,看看有没有低级的语法错误,比如少些个符号,带个特殊字符之类的。此时通扫一遍,但是不执行,这个通篇扫面的过程叫语义分析,通篇扫面后就会预编译,然后解释一行执行一行,也就是解释执行。 2. 预编译 1. imply global :暗示全局变量:即任何变量,如果变量未经声名就赋值,自变量就为全局对象所有 a = 10; // 这种应该就是 imply global 了 console.log(a); // 打印 10 window.a; // 10 说明 window 属性上有 a var b = 20; // 声名了 b, 此时 window 也有了 b 2. 一切声名的全局变量,全是 window 的属性 3. 函数声名提升:如果写了一个函数声名,无论写在哪里,浏览器都会把这个函数提到逻辑的最前面。 函数声名整体提升 4. 变量 声名提升 所以系统只提升变量,而不是变量带着值一起提 var a = 123; // 上面的变量声名分为两步 var a; // 第一步,声名变量 a = 123; // 第二步, 变量赋值 console.log(a