Запутанная отладка Firebug в операторе переключения JavaScript - PullRequest
1 голос
/ 08 декабря 2011

У меня есть следующий оператор switch в JavaScript:

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;
}

(бит "invoke" - prototype.js, но в любом случае он не имеет отношения к вопросу)

Это внутри функции. Я хочу, чтобы при значении "bottom" отображалось сообщение и выполнение метода прекращалось.

Проблема в том, что если значение, например, "top", break выполняется, но выполнение переходит к оператору return; вместо выхода из оператора switch.

Я на самом деле решил проблему, добавив после возврата дополнительный break;, который на самом деле является мертвым кодом, поскольку его невозможно выполнить.

Но мне было бы любопытно узнать, почему он вообще выполнял «возврат»?

Редактировать: извините , «возврат» фактически не был выполнен. Я просматривал код с помощью Firebug, и он на самом деле наступил и выделил строку «return», но она не была выполнена.

В моем коде есть другие проблемы, из-за которых он не работает должным образом, и я ошибочно обвинял это.

Ответы [ 3 ]

1 голос
/ 08 декабря 2011

Как я сказал в редактировании, которое я сделал к вопросу, проблема была не в том, что возвращение; был казнен, но у Firebug создалось впечатление, что я шаг за шагом прошел через инструкцию switch.

Alsot, после еще нескольких тестов, Я могу воспроизвести эту странную вещь, только когда я заключаю оператор switch / case в блок try.

Как пропущено, я оставлю этот вопрос на случай, если другие люди смущены этим поведением Firebug.

enter image description here

1 голос
/ 08 декабря 2011

Моя ставка в том, что ваш scrollable.direction дает вам значение работы, которое не является реальным направлением.

Добавьте предложение default в оператор switch (как вы всегда должны делать, кстати), чтобы проверить его

switch(scrollable.direction){
  /*...*/
  case "bottom" :
    alert("Bottom scrolling not implemented yet ! Sorry !");
    return;
  default:
    console.log(scrollable.direction, 'is not a direction');
    break;
}
0 голосов
/ 19 марта 2013

Подобная проблема возникла со мной при использовании Firebug, но в операторе IF.

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

Отладчик показал, что выполнение сценария приняло путь if вместо переменной мультишипа, равной false

...