如果另一个函数出错,为什么不运行JavaScript函数?
我运行了这个html页面并尝试从popup1()函数加载警报,但由于popup2()函数的if语句中存在错误,因此无法正常工作:
<html>
<body>
<button onclick="popup1()"> Pop up 1 </button>
<button onclick="popup2()"> Pop up 2 </button>
<script>
function popup1()
{
alert ("Pop up 1");
}
function popup2()
{
if ( 1 = 1)
{
alert ("Pop up 2");
}
}
</script>
</body>
</html>
当我将if语句更正为if(1 == 1)时,两个函数都有效。
为什么这会影响其他功能?
是否有任何可以推荐的免费软件会在我的JavaScript中发现语法错误,我真的不想因为缺少等号而再次浏览代码。我尝试了eclipse for php,但它没有设法找到它。
答案 0 :(得分:3)
Javascript在阻止序列中运行,因此如果在任何地方出现任何错误,它将停止执行。
(假设您没有在错误发生之前启动的异步函数回调)
答案 1 :(得分:1)
代码行if ( 1 = 1)
是Javascript中的解析错误。当您的代码无法正确解析时,Javascript解析器会立即停止解析您的代码,并且该脚本被认为有致命错误且未加载。
此时,它已经发现了非法的Javascript,并且最好解析器已经确定这是一个致命错误,最糟糕的是,解析器无可救药地混淆了您的代码意味着什么,无法继续。无论如何,这就是Javascript解析器的工作原理。它会在任何给定脚本中遇到的第一个解析错误时停止。
加载该页面后,您将在Javascript控制台中显示您的特定错误。您的第一道防线应该是关注调试控制台。你应该经常看它,但是如果一切都没有按照你的预期工作,总会看到那里。
在Chrome中,它会告诉你:
Uncaught ReferenceError: Invalid left-hand side in assignment
此外,您可以在代码上运行各种“lint”类型的程序,它不仅会告诉您错误,还会告诉您有关危险的做法。就个人而言,我使用http://jshint.com/,但有几个不同的程序提供此功能。
答案 2 :(得分:0)
此错误是因为数字不能重新声明,因为数字总是相同的数字。 这会导致语法错误并影响其余代码。如果你试图使这个例子没有问题。
function popup2()
{
var number = 1;
if ( number = 1)
{
alert ("Pop up 2");
}
}