Я создаю библиотеку, и я часто проверяю результат вывода Closure Compiler, чтобы увидеть, как он это делает (у меня есть модульные тесты, но мне все же нравится видеть скомпилированный код для подсказок о том, как он может сжиматься лучше).
Итак, я нашел этот очень странный фрагмент кода, который я никогда раньше не видел.
variable : {
some();
code()
}
Примечание: это не литерал объекта! Кроме того, нет ?
где-либо, что сделало бы его a ?:
условный.
Этот код находится в регулярном функциональном блоке (IIFE).
variable
, в этом случае является переменной undefined. Там нет кода, который делает его истинным, ложным или каким-либо другим, и просто чтобы убедиться, я положил туда console.log
и действительно, я получил ReferenceError
.
Пожалуйста, обратите внимание, что я тестирую свой код в IE8 тоже, так что это не только в современных браузерах. Кажется, это стандартный, простой старый javascript.
Так что дайте экспериментировать с ним. При запуске консоли Chrome я получаю следующее:
undeclaredVariable:{console.log('does this get logged?')} // yes it does.
trueValue:{console.log('what about this?')} // same thing.
falseValue:{console.log('and this?')} // same thing.
но затем...
(true):{console.log('does this work too?')} // SyntaxError: Unexpected token :
... и...
so?{console.log('is this a conditional?')}:{alert(123)} // Unexpected token .
И что он делает?
thisThing:{console.log('is used to declare a variable?')}
thisThing // ReferenceError: thisThing is not defined
Пожалуйста, мне понравилось бы, если бы кто-нибудь мог объяснить мне, что должен делать этот код, или, по крайней мере, то, что он делает.