您的位置:首页 > Web前端 > JavaScript

javascript代码执行顺序易错点

2013-04-29 21:53 232 查看
使用过javascript都知道,它是一种解释型语言,在浏览器中从上往下解释执行。但是否真的是完 全的从上往下执行的呢?其实这种说

法是不严谨的,下面有两个简单的代码示例:

示例一:

<html>

 <head>

  <script type="text/javascript">

   testOne();

   function testOne(){

    alert("Hi");

   }

  </script>

 </head>

 <body>

 </body>

</html>

    在浏览器中运行这段代码,可能不少人都会认为这段代码会出现错误,因为javascript是从上往下

执行的,当执行testOne()的时候,方法testOne()还没有定义,在实际的开发过程中也确实可能会碰到

这样的错误,当需要获得某个HTML标签的DOM对象时,由于标签还没有加载完毕而出现错误。但是此处并

非如此,代码正确的执行了,界面上弹出对话框,显示“Hi”

示例二:

<html>

 <head>

  <script type="text/javascript">

   function testOne(){

    alert("Hi");

   }

   testOne();

   function testOne()

   {

    alert("Hello");

   }

  </script>

 </head>

 <body>

 </body>

</html>

    当执行这段代码时,弹出的对话框显示的信息是“Hello”,而并非是“Hi”。按照javascript代码

从上到下依次执行的原则来说,应该是“Hi”,而不是“Hello”,那这是为什么呢?(在此简单的提一

下,可能有
4000
人会认为声明两个同名方法会出现错误,在C#、java等语言中的确无法声明两个同名方法,

但是javascript中可以这么声明,后声明的方法定义会将先声明的方法定义覆盖)

    出现以上情况的原因就是如我一开始所说的,“javascript是从上往下执行”这句话是不严谨的,

javascript并非是完全的从上往下执行,其中还有代码优先的问题。规则是方法的声明会先执行,然后

才会执行变量的赋值、方法的调用等其它代码,不论方法声明是写在其它代码前面,还是后面,都会先

执行,当然在这当中,是遵循从上到下执行的原则,写在前面的方法声明先执行,写在后面的就后执行

,其它代码也是如此。所以在示例一中,虽然testOne方法的调用写在了他声明代码的前面,但由于声明

代码是先执行的,所以这里不会出错,能够打印出“Hi”;示例二中testOne方法声明了两次 ,这两次都

会先于方法的调用而执行,并且由于是同名,第二次会覆盖第一次的方法定义,所以结果不是“Hi”,而

是“Hello”。

    为了大家能够更好的理解,再看一下第三个简单示例:

示例三:

<html>

 <head>

  <script type="text/javascript">

   var test=function testOne(){

    alert("Hi");

   }

   test();

   var test=function testOne()

   {

    alert("Hello");

   }

  </script>

 </head>

 <body>

 </body>

</html>

    这这段代码中输出的结果就是Hi,而不是Hello,因为此时是通过一个指向了方法的变量来调用方法,

方法的声明虽然先执行了,但是变量的赋值、以及方法的调用等代码是按照从上往下的规则来执行的,

当执行test()的时候,只把输出“Hi”的方法赋值给了test变量,所以输出的结果是“Hi”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: