HTML中的JavaScript按执行顺序排列

时间:2017-03-02 17:13:59

标签: javascript html

以下代码显示AAA,BBB,CCC,EEE,FFF。它会跳过DDD。 有人可以帮助为什么跳过DDD。谢谢。



<!DOCTYPE html>
<html>
  <head>
    <script>
      func1('AAA');
      function func1(x) { alert(x); }
      func1('BBB');
    </script>
  </head>
  <body>
    <script>
      func2('CCC');
    </script>
    <script>
      function func2(x) { alert(x); }
    </script>
    <script>
      func2('DDD');
    </script>
    <script>
      func3('EEE');
      function func3(x) { alert(x); }
      func3('FFF');
    </script>
  </body>
</html>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:4)

它&#34;跳过&#34; CCC,而不是DDD。原因显示在浏览器控制台中:

Uncaught ReferenceError: func2 is not defined

功能声明仅提升到他们所在的脚本的顶部,浏览器不会加载所有脚本,执行吊装,然后一步一步地运行代码。

至于

<script>
  func2('CCC');
</script>

...没有func2,但失败了。 (稍后,当然会添加func2,因此func2('DDD')有效,我们会看到DDD。)

答案 1 :(得分:1)

你的意思是跳过CCC而不是完全逻辑的DDD,因为你试图在定义func2之前调用一个函数,所以如果你检查您可以在控制台中看到描述此错误消息:

  

未捕获的ReferenceError:未定义func2

&#13;
&#13;
<!DOCTYPE html>
<html>
    <head>
        <script>
            func1('AAA');
            function func1(x) {alert(x);}
            func1('BBB');
        </script>
    </head>
    <body>
        <script>
            func2('CCC');
        </script>
        <script>
            function func2(x) {alert(x);}
        </script>
        <script>
            func2('DDD');
        </script>

        <script>
            func3('EEE');
            function func3(x) {alert(x);}
            func3('FFF');
        </script>
    </body>
</html>
&#13;
&#13;
&#13;

相反,如果您将func2的定义放在相同的script中,并且调用将提升实际的函数定义,并且它会像func1那样正常工作。

&#13;
&#13;
<!DOCTYPE html>
<html>
    <head>
        <script>
            func1('AAA');
            function func1(x) {alert(x);}
            func1('BBB');
        </script>
    </head>
    <body>
        <script>
            func2('CCC');
            function func2(x) {alert(x);}
        </script>
        <script>
            func2('DDD');
        </script>

        <script>
            func3('EEE');
            function func3(x) {alert(x);}
            func3('FFF');
        </script>
    </body>
</html>
&#13;
&#13;
&#13;

希望这有帮助。

答案 2 :(得分:-2)

我不明白为什么CCC会运行,如果没有在线路上使用该方法。这是正确的声明。

<!DOCTYPE html>
<html>
<head>
    <script>
        function func1(x) {alert(x);}
        func1('AAA');
        func1('BBB');
    </script>
</head>
<body>
    <script>
        function func2(x) {alert(x);}
    </script>
    <script>
        func2('CCC');
    </script>
    <script>
        func2('DDD');
    </script>

    <script>
        function func3(x) {alert(x);}
        func3('EEE');
        func3('FFF');
    </script>
</body>

抱歉我的英语很差。