先看下面两段js程序,先是定义式函数写法:

  • <script type="text/javascript">
  • function myfunc(){
  • alert("第一次调用");
  • };
  • myfunc(); //得出的是 第二次调用
  • function myfunc() {
  • alert("第二次调用");
  • };
  • myfunc(); //得出的是 第二次调用
  • </script>
  • 接下来是变量式函数写法:

  • <script type="text/javascript">
  • var myfunc = function (){
  • alert("第一次调用");
  • };
  • myfunc(); //得出的是 第一次调用
  • myfunc = function () {
  • alert("第二次调用");
  • };
  • myfunc(); //得出的是 第二次调用
  • </script>
  • 在定义式函数写法的代码中执行两个方法后的结果是一样的,就等于定义式函数中第一个函数没起到任何作用,得到的都是第二个函数的结果,从结果来看,JavaScript执行顺序不是按顺序一条一条来执行。
    在变量式函数写法的代码中执行两个方法后的结果是不同的,从这来看,JavaScript执行顺序是按顺序一条一条来执行的,
    从这两个不同函数的表示方法来看,在同一段程序的分析执行中,定义式函数有优先权,定义式函数执行完后,其他语句(包括变量式函数)才顺序执行,那么下面的例子也就不难得出结果了:

  • <script type="text/javascript">
  • function myfunc(){
  • alert("第一次调用");
  • };
  • myfunc(); //输出 第二次调用
  • var myfunc = function (){
  • alert("第三次调用");
  • }
  • myfunc();//输出 第三次调用 上次的结果已经被这次的变量式函数结果覆盖
  • function myfunc() {
  •        alert("第二次调用");
  • };
  • myfunc();//输出 第三次调用  function myfunc()已经不再执行
  • myfunc = function () {
  • alert("第四次调用");
  • }
  • myfunc();//输出 第四次调用
  • </script>
  • 结果就不像我们上次分析的那样了,这里的改变就是把两个相同的方法放在两个JavaScript片段里,这时两个方法都得出各自的结果,这里也就说明JavaScript是按一段一段来分析执行的,如下面代码:

  • <script type="text/javascript">
  • myfunc();//输出 第一次调用
  • var myfunc = function (){
  • alert("第二次调用");
  • }
  • myfunc();//输出 第二次调用
  • function myfunc() {
  • alert("第一次调用");
  • };
  • </script>
  • <script type="text/javascript">
  • myfunc();//输出 第三次调用
  • var myfunc = function (){
  • alert("第四次调用");
  • }
  • myfunc();//输出 第四次调用
  • function myfunc() {
  • alert("第三次调用");
  • };
  • myfunc();//输出 第四次调用
  • </script>
  • 贴内牛人总结:
    1、<script>中的代码是阻塞式同步下载执行的,当浏览器遇到一个<script>标签会先下载这个标签的代码然后执行。在完成这件事之前不会加载其他任何标签和资源。
    2、变量和函数的声明发生在代码解析期,但是,变量赋值发生在运行期,因此反复声明同名函数和变量,最后一次声明的函数被保存下来,直到运行到变量赋值的代码才发生变化。

    相关文章:

    • 2021-07-02
    • 2022-01-15
    • 2021-07-22
    • 2022-02-03
    • 2022-12-23
    • 2022-12-23
    • 2021-06-15
    • 2022-12-23
    猜你喜欢
    • 2021-09-12
    • 2021-09-10
    • 2022-12-23
    • 2021-08-03
    • 2021-10-05
    • 2021-08-12
    • 2022-12-23
    相关资源
    相似解决方案