我有一个.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>