zoukankan      html  css  js  c++  java
  • 通过实验窥探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)运行得出的。
    二、上述八个实验是相互独立的,请分别单独运行以得到正确的结果。

  • 相关阅读:
    什么是子网掩码?(转)
    测试LM414-IOT网关MQTT功能
    连接s7-200时,提示未找到指定的访问点
    github中文件夹后面跟@+数字什么意思?为什么git clone下来里面是空的?
    Java知识32 数据结构 枚举 向量【多测师】
    java知识31 void 、实例化对象后面带参数、 实例变量(重点)【多测师】
    Java知识30 package【多测师】
    Java知识29 接口【多测师】
    java知识28 Java封装【多测师】
    Java知识27 抽象类【多测师】
  • 原文地址:https://www.cnblogs.com/web100/p/js-cixu.html
Copyright © 2011-2022 走看看