代码的运行分两个阶段
-
解析(编译)阶段
先进行代码的语法检查,然后是变量和语法的声明
-
运行阶段
变量的赋值,代码流程的执行
案例说明
在浏览器中运行下面的代码,会在console中打印undefined,
<script type="text/javascript">
console.log(a);
var a = 3;
</script>
而执行下面的代码时,会报错
<script>
console.log(a);
//var a = 3;
</script>
因为代码先编译,编译时a声明了,但没赋值;再执行时,是顺序结构执行的,先执行了console.log(a);后赋值,所以注释掉var a = 3;时,执行结果由undefined变为报错。
所以代码
<script type="text/javascript">
console.log(a);
var a = 3;
</script>
可理解成
<script type="text/javascript">
var a;
console.log(a);
a = 3;
</script>