What do these characters do in Javascript
我在这里浏览了一段代码http://cssdeck.com/labs/bjiau4dy,我在javascript框中看到了这段代码。-
1 | !+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+! |
那有什么用?为什么它不在控制台中抛出错误呢?
谢谢!
这些符号中的任何一个都将其后面的函数转换为函数表达式,而不是函数声明。把它们放在一起只是为了好玩。
如果您试图通过在声明后立即放置EDOCX1[0]来调用正则函数:
1 2 3 | function () { // this is a syntax error... }(); |
您将得到一个语法错误:
SyntaxError: Unexpected token (
因为不能调用函数声明。
因此,人们通常将匿名函数用括号括起来,将其转换为函数表达式:
1 2 3 | (function () { // this will execute immediately }()); |
你也可以在这些符号前面做同样的事情:
1 2 3 | !function () { // this will also execute immediately }(); |
有关详细信息,请参阅:http://kangax.github.com/nfe/expr vs decl
更详细地说,这些运算符中的每一个都将对继续执行它的操作数执行类型强制。
要记住的另一件事是,在JavaScript中,所有东西都可以有某种价值的评估。这可能是一个"真实的"或"虚假的"值,也可能有一个"数字"值(即使该值不是一个数字,也称为
因此,如果您打开jsfiddle或firebug,然后乱弄这些值对函数的作用,您可以看到它们也会产生某种新的返回值。
例如:
注意,我用Firebug检查了这些。浏览器之间可能存在差异,也许Firebug在评估中向我们展示了什么。tl;dr是javascript执行大量类型强制,并且将以不同于声明的方式对表达式进行计算。
除了作为一个风格的水印,做一组长的符号是没有意义的。
这组符号对后面的函数起到操作的作用,但不起任何作用。
在JS中,您可以编写
所以
而
但是,由于存在某些内容,它将函数定义转换为一个操作,并立即对函数进行评估。但只有江户十一〔六〕也会做同样的事。