关于js预编译以及js文件执行顺序的几个问题。

            关于js的执行原理,除去html页面中直接添加的代码,js代码的放置可以分为两类。

           //情形a
           <script type="text/javascript" src="xxx.js"$amp;>amp;$lt;/script>
           //情形b 
           <script type="text/javascript">
           code......
          </script>

      (1)a中的js代码和b中js的代码都是代码段,引入一个js文件就是引入一个代码段。一个script闭标签里面夹的一个也是一个代码段。当页面载入时,这些代码段都是按照自上而下的顺序执行的,也就是说,执行完上一个代码段

             才会去执行下一个代码段。

      (2)每个代码段执行的顺序是相同的,

            检查语法--》预编译--》最后执行

      一个函数重名问题,同一页文件中和独立js文件中的区别

  //代码段1开始
  function a(){
  alert(1);
  }
  var f1=a;//保存a
  //代码段1结束
  //代码段2开始
  function a(){
  alert(2);
  }
  var f2=a;//保存a

f2();

  //代码段2结束

  window.onload=function(){
  f1();

  如果把这两个函数写在同一个js文件里面, 后面的会覆盖前面的一个。但是如果分别写在两个js文件里面。不会覆盖.。第一段代码在当前的环境中找到了function a(){alert(1);}所以就把这个函数保存在f1中,第二段代码时全局

 之前的函数a被覆盖。是新的a函数。但是由于之前的f1已经保存的是原来的函数,所以f1无法改变。假设,这个时候在后面再添加一个js文件,引用a函数,输出结果还是2。

       如果所有的代码放在一块,在预解析阶段,后面的函数会把前面的给覆盖。  

原文地址:https://www.cnblogs.com/qianxinxu/p/5495370.html