奇怪的匿名javascript函数调用

时间:2013-04-23 13:11:52

标签: javascript

我正在查看this非常酷的片段,我在js中遇到了这个奇怪的行 并删除,以防止调用该功能

!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!
function(d, w){
   ...
}(document, window);

,我将函数与()按原样包装,并按预期工作。

(function(d, w){
    ...
})(document, window);

所以我的问题是什么是奇怪的线,为什么它有效?我狂野的客人是它是某种IIFE ...

2 个答案:

答案 0 :(得分:11)

你是对的,它是Immediately-Invoked Function Expression (IIFE)

你可以改写

!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!
function(d, w){
   ...
}(document, window);

!function() {
    ...
}()

它仍然有效。这是因为!是一元运算符(就像+-~ - 请参阅https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators)。 在一元运算符之后,预期表达式(并进行评估!)。表达式可以是函数调用。

然而

!function() {
    ...
}()

只是另一个表达式,因此您可以在其前面放置另一个一元运算符:

+!function() {
    ...
}()

您可以根据需要继续使用此模式。

注意:以这种方式调用匿名函数,忽略函数的返回值。因此,如果您对返回值不感兴趣,请仅使用此项。

修改:添加了对Daff在答案中提到的http://benalman.com/news/2010/11/immediately-invoked-function-expression/的精彩参考。

答案 1 :(得分:4)

诀窍实际上是那里的单!运算符(整个第一行实际上做同样的事情)。这也可行:

!function(d, w){
   ...
}(document, window);

一如既往,我可以在Immediately-Invoked Function Expressions

上推荐Ben Almans的精彩文章