我在JavaScript中有以下switch语句:
switch(scrollable.direction){
case "top" :
break;
case "left" :
break;
case "right" :
scrollable.select("."+lineCssClass).invoke("setStyle", {float: "right"});
break;
case "bottom" :
alert("Bottom scrolling not implemented yet ! Sorry !");
return;
}
(“调用”位是prototype.js,但无论如何它与问题无关)
它在一个函数内部。我希望如果值为"bottom"
,则会显示一条消息并停止执行方法。
问题是如果值是例如"top"
,break
被执行,但执行跳转到return;
语句而不是退出switch语句。
我实际上通过在返回后添加了一个额外的break;
来解决了这个问题,这实际上是死代码,因为它永远无法执行。
但我很想知道为什么它首先执行“回归”?
编辑:对不起,“返回”实际上并未执行。我正在使用Firebug逐步执行代码,它实际上踩到并突出显示“返回”行,但它没有被执行。
我的代码中还有其他问题导致它无法按预期工作,我错误地指责了这一点。
答案 0 :(得分:1)
我敢打赌,你的scrollable.direction
给了你一个错误的价值,这不是一个真正的方向。
在你的switch语句中添加default
子句(正如你应该做的那样,顺便说一句)来检查它
switch(scrollable.direction){
/*...*/
case "bottom" :
alert("Bottom scrolling not implemented yet ! Sorry !");
return;
default:
console.log(scrollable.direction, 'is not a direction');
break;
}
答案 1 :(得分:1)
正如我在编辑中所说的那样,问题实际上不是回归;被执行了,但Firebug给人的印象是我一步一步地通过切换声明。
Alsot,经过一些更多的测试,只有当我将switch / case语句包含在try块中时,我才能重现这个奇怪的事情。
由于missno暗示我会留下这个问题以防其他人对Firebug的这种行为感到困惑。
答案 2 :(得分:0)
使用Firebug但在IF语句中发生了类似的问题。
if(multiship == true)
{
// do something
}
else
{
// do something
}
调试器显示脚本执行采用if路径而不是使multiship变量等于false。