2013-01-01 54 views
3

我遇到了这种形式的自调函数。什么是“!”?JavaScript自调用函数Not

!function (a) { 
    // something 
}(1); 

我不知道是否存在问题。对不起,如果这是一个重复。

+1

看起来像()'d一样的目的,以防止它被解析为函数声明。 –

回答

4

通过使用!,它正在评估匿名函数(从而要求它运行)。没有这个,你会得到一个错误。

而且,正如其他人所说,如果您正在分配或评估它,它会颠倒任何函数返回的结果。

+0

啊我明白了。我通常使用(function(){console.log('body');})()。这只是另一种做法,但可以保存1个字符。 –

+0

@ Grace-Shao - 是的,情况正是如此。如果您关心函数返回的内容,那么它具有更大的意义,否则使用相同的函数。 – Apropos

0

不是没有意义的,除非函数返回值被赋值给某物。如果分配,左侧将得到不是自执行功能的结果。结果将是显式返回的值或函数中最后一次计算的值。

0

如果它返回的东西,它只是逆结果:

console.log(!(function(a) { return (a == 1); })(1)); 

将返回false。如果你给0或其他任何东西,则为true。