私はライブラリを作成しています。ClosureCompilerの出力の結果を調べて、それがどのように機能しているかを確認することがよくあります(単体テストはありますが、コンパイルされたコードを見て、圧縮を改善するためのヒントを確認したいと思います)。
それで、私はこれまで見たことのない非常に奇妙なコードを見つけました。
variable : {
some();
code()
}
注:これはオブジェクトリテラルではありません!また、それを条件付き?
にする場所はどこにもありません。?:
そのコードは通常の機能ブロック(IIFE)にあります。
variable
この場合、は未定義の変数です。それをtrue、false、または何でもするコードはありません。念のために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
このコードが何を意味するのか、少なくともそれが何をするのかを誰かが私に説明してくれたら、私はそれが大好きです。