Firebug调试在JavaScript switch语句中令人困惑

时间:2011-12-07 21:25:46

标签: javascript firebug switch-statement

我在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逐步执行代码,它实际上踩到并突出显示“返回”行,但它没有被执行。

我的代码中还有其他问题导致它无法按预期工作,我错误地指责了这一点。

3 个答案:

答案 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的这种行为感到困惑。

enter image description here

答案 2 :(得分:0)

使用Firebug但在IF语句中发生了类似的问题。

if(multiship == true) 
{
// do something
} 
else 
{
// do something
}

调试器显示脚本执行采用if路径而不是使multiship变量等于false。