==========================================先看第一部分比较======================================
- <SCRIPT LANGUAGE="JavaScript">
- <!--
- /***************************
- *
- * JS的解释顺序
- *
- ***************************/
- //首先看第一段代码
- var myfunc = function(){
- alert("hello");
- };
- myfunc();// 第一次调用myfunc,输出hello
- myfunc = function(){
- alert("yeah");
- };
- myfunc();// 第二次调用myfunc,输出yeah
- //-->
- </SCRIPT>
==========================================再看第二部分比较======================================
- <SCRIPT LANGUAGE="JavaScript">
- <!--
- /***************************
- *
- * JS的解释顺序
- *
- ***************************/
- //首先看第一段代码
- function myfun(){
- alert("hello");
- };
- myfun(); // 竟然输出yeah
- function myfun(){
- alert("yeah");
- };
- myfun(); // yeah
- //-->
- </SCRIPT>
==========================================再看第三部分比较======================================
- <script>
- //首先看第一段代码
- function myfun(){
- alert("hello");
- };
- myfun(); // hello
- </script>
- <script>
- function myfun(){
- alert("yeah");
- };
- myfun(); // yeah
- </script>
通过这3部分区别的比较可以得出结论:
原来JS引擎并非一行行去分析和执行程序,而是一段一段的执行(如3),而且在同一段程序的分析执行中,定义式的函数语句会被优先执行。函数定义执行完以后才会按顺序执行其他语句代码,所以(如2)的原因是第一个函数的语句定义被第二个函数覆盖了。所以两次都是执行最后一个函数逻辑了。