javascript中的函数 !function是什么意思?

what does !function in Javascript mean?

本问题已经有最佳答案,请猛点这里访问。

很抱歉发布此消息,但是!函数不支持google,在我的javascript代码中找不到它。

以下是Twitter的使用方法:

1
2
Tweet
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");

来自https://twitter.com/about/resources/buttons#


它是自调用匿名函数的简略方法或替代方法:

1
2
3
(function(){
  // code
})();

可以写成:

1
2
3
!function(){
  // code
}();

您也可以使用+而不是!

如果你只是这样做:

1
2
3
function(){
  // code
}();

这将产生问题,这就是为什么需要在它之前添加!,从而将函数声明转换为函数表达式。

引用文件,第12.4节:

An ExpressionStatement cannot start with the function keyword because
that might make it ambiguous with a FunctionDeclaration.

为了更好地理解这个概念,您应该查看:

  • 函数声明与函数表达式


它通常用于解决JavaScript语法中的一个奇怪问题。这会导致语法错误:

1
2
function() {
}();

它被解读为一个函数声明(如function foo () {}),而不是一个函数表达式。所以添加了!在它之前,或者用括号将它括起来,强制解析器理解它是一个表达式。


他们否定的是结果,而不是函数本身:

1
2
3
!function( x ){ return x }( true );
!true
false

实际上,它是一种稍微压缩的形式:

1
(function(){}())

因为它需要少一个字符。需要这样做的原因是您不能直接调用函数声明,例如,这是无效的:

1
function(){}()

但是,在开始时添加!会使它变成一个函数expression,并使其工作。