JavaScript 中缺少分号导致 IE9 中出现“‘foo’未定义”错误

2023-12-14

我只花了大约四个小时来解决这个问题。我知道是什么原因造成的,但不知道为什么,“为什么”困扰着我。

我有以下 .js 文件:

function funcA() {
}
function funcB() {
    do {
    } while (1 == 1) return 0
}

我还有以下 HTML 页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <title></title>
    <script src="JScript1.js" type="text/javascript"></script>
</head>
<body>
    <script type="text/javascript">
        new funcA();
    </script>
</body>
</html>

当我在 IE9 中加载页面时,出现“'funcA'未定义”错误。我可以通过 do 消除运行时错误any one以下的:

  • 在 IE9 中打开兼容性视图
  • 从页面中删除 DOCTYPE
  • 在 JavaScript 中 while 后面和 return 之前添加分号(即 while (1 = 1); return 0)

谁能帮助我了解这里到底发生了什么?


不幸的是,JavaScript 并不要求您在所有应该有分号的地方显式地添加分号 - 但它会在内部为您添加这些分号。这通常会导致难以追踪的错误和意外行为。

除了代码中的其他语法错误(正如其他人指出的那样),;之后while in a do-while is需要的,当你把它放在那里时,事情就会按照你期望的那样进行。如果不这样做,临时开发人员几乎不可能在不深入研究语言和 JS 引擎规范的情况下预测不同环境的行为方式and理解这一切 - 假设 JS 引擎本身的实现没有错误。小事,例如您是否带牙套({ and })在同一行或不在同一行可能会有所不同.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中缺少分号导致 IE9 中出现“‘foo’未定义”错误 的相关文章

随机推荐