Согласно спецификации HTML5 , & lt; script & gt;
элементы с атрибутами src
должны иметь только код с комментариями, который предназначен чтобы предоставить документацию для скрипта. Похоже, что Google не соответствует этой спецификации.
Я полагаю, что это связано с общей областью переменной, это область уровня блока, которая определена на уровне коммутатора.
Лично, если вы задаете значение чему-то внутри коммутатора в вашем примере, чтобы это действительно имело какую-либо пользу, вы все равно захотите объявить его вне коммутатора.
Инициализация выполняется в случае, но объявление эффективно выполняется в верхней части области. (Psuedo-code)
switch (Type)
{
string variable;
case Type.A:
variable = "x";
break;
case Type.B:
variable = "y";
break;
}
break
s, вы получите что-то вроде: `` `string variable = & quot; x & quot ;; переменная = "y"; `` `Это процедурный GOTO:
для всех целей и целей. Правильный код должен быть чем-то вроде `` `string myVar; switch (myValue) {case MyEnum.A: myVar = & quot; x & quot ;; ломать; case MyEnum.B: myVar = "Y" ;; ломать; } `` `
– percebus
20 June 2014 в 06:42
switch
равно scope
, в отличие от предложения if
. Это одна из основных причин switch
, которые часто рассматриваются как «плохой код». (больше похоже на un-comprehended) Таким образом, объявление содержимого внутри скобок все еще делает его доступным в глобальной области. msdn.microsoft.com/en-us/library/06tc147t.aspx
– percebus
24 November 2014 в 19:04
Поскольку их область действия находится в блоке коммутатора. Спецификация языка языка C # указывает следующее:
Область локальной переменной или константы, объявленная в блоке коммутатора, является блоком коммутатора.
blockquote >
Да, область действия - это весь блок коммутатора - к сожалению, ИМО. Однако вы можете добавлять фигурные скобки в одном случае, чтобы создать меньшую область видимости. Что касается того, созданы ли они / выделены - в стеке стека достаточно места для всех локальных переменных в методе (исключая сложности захваченных переменных). Это не похоже на то, что пространство выделяется во время выполнения метода.
«В My Daaaaays ...»
swicth
- действительно примитивная процедурная реализация, которая существует уже с возрастов C
(даже до C++
).
Весь switch
- это блок, который служит в качестве рамки GOTO:
(следовательно, :
в каждом case
). Если вы взяли некоторые классы ассемблера, это может показаться знакомым.
Вот почему использование switch
наиболее полезно при объединении с Enum
s и не использовании break
в каждом case
, как
switch(mood)
{
case Mood.BORED:
case Mood.HAPPY:
drink(oBeer) // will drink if bored OR happy
break;
case Mood.SAD: // unnecessary but proofs a concept
default:
drink(oCoffee)
break;
}
Эти переменные разделяют область действия в компиляторе C #. Однако область видимости не существует в CIL . Что касается фактического создания / инициализации ... модель памяти .NET позволяет движению компилятора читать / записывать бит до тех пор, пока соблюдаются простые правила, если только переменная не отмечена как volatile .