我现在已经在一些库中看到了这种语法,我想知道这样做有什么好处。(请注意,我非常了解闭包以及代码在做什么,我只关心语法上的差异)
!function(){ // do stuff }();
作为更常见的替代
(function(){ // do stuff })();
自调用匿名功能。
我想知道几件事。首先,什么是最有效的例子?为了使该语句在语法上正确,为什么必须使用爆炸呢?有人告诉我这+行得通,而且我敢肯定还有其他地方可以代替!
+
!
第二,好处是什么?我只能说它保存了一个字符,但是我无法想象吸引如此多的采用者具有如此巨大的好处。我还有其他好处吗?
我可以看到的唯一其他区别是自调用函数的返回值,但是在这两个示例中,我们都不在乎函数的返回值,因为它仅用于创建闭包。那么有人可以告诉我为什么可能使用第一种语法吗?
理想情况下,您应该能够简单地完成所有这些操作:
function(){ // do stuff }();
这意味着声明匿名函数并执行它。但这由于JS语法的特殊性而行不通。
因此,实现此目标的最短形式是使用某些表达式,例如UnaryExpression(以及CallExpression):
还是为了好玩:
-function(){ // do stuff }();
要么:
+function(){ // do stuff }();
甚至:
~function(){ // do stuff return 0; }( );