JavaScript 预解析机制
首先我们来看一段代码: 1 <script> 2 console.log(a); 3 var a = 10; 4 </script> 此时运行结果为 为什么会显示undefined呢?这就涉及到了 预解析中的变量提升 : 1、 局部提升(变量) 会把变量声明分成两部分 1) 变量声明 只有这个部分发生了提升 ,提升至所在作用域的最前面 2) 变量赋值 在原位置; 接下来再看一段代码: 1 <script> 2 foo(); 3 function foo(){ 4 console.log("hello world"); 5 } 6 </script> 此时运行结果为: 我们会发现,声明式的函数,调用在声明之前也是可以访问的。这是因为 预解析总的函数提升 : 2 、整体提升(函数) 整个函数都提升到作用域的最前面 了解了变量提升和函数提升,那么我们来想一下两者谁的优先级更高? 1 <script> 2 console.log(foo); 3 var foo = 10; 4 function foo(){} 5 </script> 显示结果为: 结果得到函数而不是变量; 也就是说:函数将变量声明覆盖,说明是先变量提升之后,函数再提升上去将其覆盖。所以, 变量提升的优先级高。 总结 : JavaScript 预解析机制 有如下操作: 检查 你的所有代码有没有 语法错误 。如果有语法错误