通过实验窥探javascript的解析执行顺序

简介

javascript是一种解释型语言,它的执行是自上而下的。但是各浏览器对于【自上而下】的理解是有细微差别的,而代码的上下游也就是程序流对于程序正确运行又是至关重要的。所以我们有必要深入理解js的执行顺序。为此,我设计了如下八个实验来获得最确切的结果。

 

实验 

  1. <script type="text/javascript">  
  2. //实验一:  
  3. function t(a)  
  4. {  
  5.     alert("[t(a)]a:" + a);  
  6. }  
  7. function t(a, b)  
  8. {  
  9.     alert("[t(a, b)]a:" + a + ", b:" + b);  
  10. }  
  11. t(1);  
  12. //结果:  
  13. //[t(a, b)]a:1, b:undefined  
  14.   
  15. //实验二:  
  16. function t(a, b)  
  17. {  
  18.     alert("[t(a, b)]a:" + a + ", b:" + b);  
  19. }  
  20. function t(a)  
  21. {  
  22.     alert("[t(a)]a:" + a);  
  23. }  
  24. t(1);  
  25. //结果:  
  26. //[t(a)]a:1  
  27.   
  28. //实验三:  
  29. function t(a)  
  30. {  
  31.     alert("[t(a)]a:" + a);  
  32. }  
  33. function t(a, b)  
  34. {  
  35.     alert("[t(a, b)]a:" + a + ", b:" + b);  
  36. }  
  37. t(1, 2);  
  38. //结果:  
  39. //[t(a, b)]a:1, b:2  
  40.   
  41. //实验四:  
  42. function t(a, b)  
  43. {  
  44.     alert("[t(a, b)]a:" + a + ", b:" + b);  
  45. }  
  46. function t(a)  
  47. {  
  48.     alert("[t(a)]a:" + a);  
  49. }  
  50. t(1, 2);  
  51. //结果:  
  52. //[t(a)]a:1  
  53.   
  54. //实验五  
  55. function t(a)  
  56. {  
  57.     alert("[t(a)]a:" + a);  
  58. }  
  59. t(1);  
  60. function t(a, b)  
  61. {  
  62.     alert("[t(a, b)]a:" + a + ", b:" + b);  
  63. }  
  64. //结果:  
  65. //[t(a, b)]a:1, b:undefined  
  66.   
  67. //实验六  
  68. function t(a)  
  69. {  
  70.     alert("[t(a)]a:" + a);  
  71. }  
  72. t(1, 2);  
  73. function t(a, b)  
  74. {  
  75.     alert("[t(a, b)]a:" + a + ", b:" + b);  
  76. }  
  77. //结果:  
  78. //[t(a, b)]a:1, b:2  
  79.   
  80. //实验七  
  81. function t(a, b)  
  82. {  
  83.     alert("[t(a, b)]a:" + a + ", b:" + b);  
  84. }  
  85. t(1);  
  86. function t(a)  
  87. {  
  88.     alert("[t(a)]a:" + a);  
  89. }  
  90. //结果:  
  91. //[t(a)]a:1  
  92.   
  93. //实验八  
  94. function t(a, b)  
  95. {  
  96.     alert("[t(a, b)]a:" + a + ", b:" + b);  
  97. }  
  98. t(1, 2);  
  99. function t(a)  
  100. {  
  101.     alert("[t(a)]a:" + a);  
  102. }  
  103. //结果:  
  104. //[t(a)]a:1  
  105.   
  106. </script>  

 

后记

定义javascript函数时,函数名是函数对象的标识,参数数量只是这个函数的属性。靠定义参数数量不同的函数实现重载是不行的。
调用函数时,js通过函数名找到对应的函数对象,然后根据函数定义时的参数,和表达式参数列表按顺序匹配,多余的参数舍去,不够的参数按undefined处理,然后执行函数代码。

所以定义函数时,通常把必选参数放在参数列表最前面,可选参数放在必选参数后面。

 

注意事项

一、上述八个实验的结果是经过360浏览器(版本/内核:6.3.1.142/21.0.1180.89)和火狐浏览器(版本:27.0.1)运行得出的。
二、上述八个实验是相互独立的,请分别单独运行以得到正确的结果。

posted @ 2014-03-17 13:21  web8  阅读(352)  评论(0编辑  收藏  举报