我有一个.jsp文件,概述如下。注意:


有两个脚本标签
第一个脚本标签具有与之关联的Javascript类型,第二个则没有
第二个脚本标签位于第一个脚本标签之后
第二个脚本标签包含一个从第一个脚本内部调用的函数


    <div>
        <!--  various bits of HTML and JSTL etc -->
    </div>

    <script type="text/javascript">
        runWhenPageReady() {
            doSomething();
        }
    </script>
    <script>
        function doSomething() {
            //do something
        }
    </script>


我们有一个用户的浏览器无法正确加载页面,并且控制台返回以下错误:

Uncaught ReferenceError: doSomething is not defined


浏览器如何评估标签-是在与第一个不同的<script>标签中定义功能的事实,这是事实的元凶吗?将两个<script>标记结合在一起是否有任何问题?

最佳答案

我本来会在任何浏览器中看到该错误。

到达结束标记后,将执行<script>标记。因此,当第一个标签关闭时,函数定义尚未处理。在调用该函数时,应以“ Uncaught ReferenceError:foo未定义”中断:



<script>
  foo();
</script>
<script>
  function foo() {
    console.log("foo");
  }
</script>





如果我们反转脚本,则函数将在调用时定义,并且一切正常:



<script>
  function foo() {
    console.log("foo");
  }
</script>
<script>
  foo();
</script>





如果我们将脚本连接在一起,它将以任何顺序工作,因为在单个脚本中,function将被提升到顶部:



<script>
  foo();

  function foo() {
    console.log("foo");
  }
</script>

09-10 11:59
查看更多