标签:
js预编译是对每一个<script>标签片段进行的。预编译声明所有var变量(初始为undefined),解析定义式函数语句。
还有个关于 "window作用域下,a = 1和var a = 1" 的区别的也很经典:
<script> alert(a); f(); </script> <script> alert(a); f(); function f(){ console.log(‘我执行了‘); } a=1; </script> <script> alert(‘333‘); </script>
因为没有声明a变量,所以片段一和片段二都会报错,只有片段三弹出‘333‘
<script> alert(a);//报错 找不到a f(); </script> <script> alert(a);//弹出undefined f();//输出: ‘我执行了‘ function f(){ console.log(‘我执行了‘); } var a=1; </script> <script> alert(‘333‘);//弹出333 </script>
片段一会报错,因为预编译是按script片段走的,片段一找不到a和f();片段二在预编译的时候,a变量会被提前声明并赋值undefined,f函数会被提前定义。
标签:
原文地址:http://www.cnblogs.com/freefish12/p/5602141.html