Javascript匿名函数调用

Javascript匿名函数调用,javascript,anonymous-function,Javascript,Anonymous Function,我正在阅读Twitter上的JS资源——在我改进JS知识库的路上,我遇到了调用匿名函数的奇怪方式: !function( $ ) { ... }( window.jQuery ); 。。。这就行了!: 大家都很清楚,这是: function ( $ ) { ... } ( window.jQuery ) 不工作语法错误,但此错误是正确的: (function ( $ ) { .... })( window.jQuery ) 谁能解释一下为什么会有这样的魔术!函数起作用了?就感叹号而

我正在阅读Twitter上的JS资源——在我改进JS知识库的路上,我遇到了调用匿名函数的奇怪方式:

!function( $ ) {
    ...
}( window.jQuery );
。。。这就行了!:

大家都很清楚,这是:

function ( $ ) { ... } ( window.jQuery )
不工作语法错误,但此错误是正确的:

(function ( $ ) { .... })( window.jQuery )

谁能解释一下为什么会有这样的魔术!函数起作用了?

就感叹号而言,这不是魔法。 它将结果转换为真/假

您的问题可能是匿名函数中有错误。

第二种形式的函数{}是一条语句。这个运算符将其转换为表达式。您还将发现人们在function关键字之前使用-或+的情况

当表达式对函数求值时,可以使用运算符调用该函数

另一种可能更容易理解的实现保存相同效果的方法是使用另一组括号:

( function(x) { body; } )(arg);
通过将函数放在括号内,可以再次将其转换为表达式,表达式的计算结果为函数。使用arg作为参数调用此函数

作为箭头功能:

!function( $ ) {
    ...
}( window.jQuery );
x=>{body;}arg; 当关键字function作为语句中的第一个标记出现在语句位置时,函数声明将表示为function语句。函数语句被提升到作用域的顶部,不能立即调用,并且必须具有名称

在您的示例中,当关键字在表达式位置遇到时,即不是作为语句中的第一个标记!是第一个标记,函数声明表示为函数表达式,该表达式可以是匿名的,并返回新创建函数的值。由于它返回新创建的函数的值,您可以通过在其后面添加括号来立即调用它

将声明包装在括号内也有同样的作用,但比在其前面加上前缀更常见!或+:


这听起来像是一个javascript语法错误:

一个命名函数可以是一个语句,但是一个匿名函数只是把它看作一个表达式。< /P> 赞成者: 您可以执行函数{…}

反对: 无法执行函数{…}


但是为什么人们想要定义一个匿名函数而不调用它呢?所以con并不是一个真正的问题。

只要试着计算函数a{alerta;}5;-你会得到一个错误。然后将函数替换为!函数,然后重试。另外请注意,functiona{…}5和functiona{…}5成功运行。有关其他有效的IIFE模式,请参阅。@AtesGoral,谢谢,这篇文章非常有用。可能它们使用了!而不是将其包装,因为它使用的字符减少了50%:越线越少=加载时间越快。