strange anonymous javascript function call
本问题已经有最佳答案,请猛点这里访问。
我在看这个非常酷的片段,我在JS中遇到了这条奇怪的线。以及删除阻止调用函数的
1 2 3 4 | !+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+! function(d, w){ ... }(document, window); |
,我用()包装了函数,它按预期工作。
1 2 3 | (function(d, w){ ... })(document, window); |
所以我的问题是,这条奇怪的线是什么,为什么会起作用?我的狂野的客人是这是一种生活…
你是对的,它是一个立即调用的函数表达式(IIFE)
你可以重写
1 2 3 4 | !+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+! function(d, w){ ... }(document, window); |
到
1 2 3 | !function() { ... }() |
它仍然有效。这是因为
然而
1 2 3 | !function() { ... }() |
只是另一个表达式,因此可以在它前面放置另一个一元运算符:
1 2 3 | +!function() { ... }() |
您可以按照自己的意愿继续这个模式。
注意:这样调用匿名函数时,忽略函数的返回值。因此,如果您对返回值不感兴趣,那么只使用这个。
编辑:在http://benalman.com/news/2010/11/immediately-invoked-function-expression/中添加了一个很好的参考,daff在他的回答中提到了这个参考。
诀窍实际上是单个的
1 2 3 | !function(d, w){ ... }(document, window); |
像往常一样,我可以推荐本·阿尔曼关于立即调用函数表达式的伟大文章