Ответ 1
Разрыв позволит вам продолжить обработку в функции. Просто возврат из коммутатора прекрасен, если это все, что вы хотите сделать в функции.
Вариант 1 - переключатель с использованием возврата:
function myFunction(opt)
{
switch (opt)
{
case 1: return "One";
case 2: return "Two";
case 3: return "Three";
default: return "";
}
}
Вариант 2 - переключатель с использованием break:
function myFunction(opt)
{
var retVal = "";
switch (opt)
{
case 1:
retVal = "One";
break;
case 2:
retVal = "Two";
break;
case 3:
retVal = "Three";
break;
}
return retVal;
}
Я знаю, что обе работают, но это еще одна лучшая практика? Я предпочитаю вариант 1 - переключатель с лучшим возвратом, так как он чище и проще.
Вот jsFiddle моего конкретного примера, используя технику, упомянутую в комментариях @ic3b3rg:
var SFAIC = {};
SFAIC.common =
{
masterPages:
{
cs: "CS_",
cp: "CP_"
},
contentPages:
{
cs: "CSContent_",
cp: "CPContent_"
}
};
function getElementPrefix(page)
{
return (page in SFAIC.common.masterPages)
? SFAIC.common.masterPages[page]
: (page in SFAIC.common.contentPages)
? SFAIC.common.contentPages[page]
: undefined;
}
Чтобы вызвать функцию, я бы сделал это следующими способами:
getElementPrefix(SFAIC.common.masterPages.cs);
getElementPrefix(SFAIC.common.masterPages.cp);
getElementPrefix(SFAIC.common.contentPages.cs);
getElementPrefix(SFAIC.common.contentPages.cp);
Проблема заключается в том, что он всегда возвращает undefined. Я предполагаю, что это потому, что он передает фактическое значение объектного литерала, а не свойство. Что бы я сделал, чтобы исправить это, используя технику, описанную в комментариях @ic3b3rg?
Разрыв позволит вам продолжить обработку в функции. Просто возврат из коммутатора прекрасен, если это все, что вы хотите сделать в функции.
Это зависит, если ваша функция состоит только из оператора switch, тогда я думаю, что это нормально. Однако, если вы хотите выполнять любые другие операции внутри этой функции, возможно, это не очень хорошая идея. Возможно, вам также придется учитывать ваши требования прямо сейчас и в будущем. Если вы хотите изменить свою функцию с одного варианта на второй вариант, потребуется больше рефакторинга.
Однако, учитывая, что в операторах if/else лучше всего сделать следующее:
var foo = "bar";
if(foo == "bar") {
return 0;
}
else {
return 100;
}
Исходя из этого, можно было бы аргументировать, что вариант лучше - лучше.
Короче говоря, нет четкого ответа, так как ваш код придерживается согласованного, читаемого, поддерживаемого стандарта, то есть не смешивать и сопоставлять варианты один и два во всем приложении, это наилучшая практика вы должны следовать.