奇怪的匿名javascript函数调用
我在看一段很酷的片段,在js中我发现了这条奇怪的线 以及删除阻止调用该函数的奇怪的匿名javascript函数调用,javascript,Javascript,我在看一段很酷的片段,在js中我发现了这条奇怪的线 以及删除阻止调用该函数的 !+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+! function(d, w){ ... }(document, window); ,我用()包装了函数,它按预期工作 (function(d, w){ ... })(document, window); 所以我的问题是,这条奇怪的线是什么,为什么它会起作用?我的不速之客是,这是一种生活…诀窍实际上是单曲
!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!
function(d, w){
...
}(document, window);
,我用()包装了函数,它按预期工作
(function(d, w){
...
})(document, window);
所以我的问题是,这条奇怪的线是什么,为什么它会起作用?我的不速之客是,这是一种生活…诀窍实际上是单曲
代码>运算符(整个第一行实际上执行相同的操作)。这同样适用于:
!function(d, w){
...
}(document, window);
像往常一样,我可以推荐本·阿尔曼斯关于的伟大文章,你是对的,这是一篇
你可以重写
!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!
function(d, w){
...
}(document, window);
到
它仍然有效。这是因为
是一个一元运算符(就像+
、-
和~
——请参阅)。
在一元运算符之后,需要(并计算!)表达式。表达式可以是函数调用
然而
!function() {
...
}()
只是另一个表达式,因此可以在其前面放置另一个一元运算符:
+!function() {
...
}()
您可以按照自己的意愿继续此模式
注意:以这种方式调用匿名函数会忽略函数的返回值。因此,如果您对返回值不感兴趣,请仅使用此选项
编辑:添加了一个很好的参考,达夫在回答中提到了这个参考。它不是代码>操作员技巧!要详细说明重复的代码:+
、-
和
是所有一元运算符都在做与单独的相同的事情代码>在链接的副本中。@apsiller这样那些副本就没有必要了?@MimiEAM正确,只有一个+
,-
或代码>是将函数解析为函数表达式(而不是函数声明)所必需的。感谢您的澄清:)谢谢,我希望我能接受这两个答案
+!function() {
...
}()