我正在制作一个库,我经常检查 Closure Compiler 的输出结果以了解它是如何做事的(我确实有单元测试,但我仍然希望看到编译后的代码以了解它如何更好地压缩的提示)。
所以,我发现了这段非常奇怪的代码,这是我以前从未见过的。
variable : {
some();
code()
}
注意:这不是对象字面量!此外,没有?
任何地方可以使它成为?:
有条件的.
该代码位于常规功能块(IIFE)中。
variable
,在这种情况下,是一个未定义的变量。没有代码使它成为 true 、 false 或任何东西,只是为了确保我把 aconsole.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
拜托,如果有人可以向我解释这段代码的用途,或者至少是它的作用,我会很高兴。