很抱歉发布这个但是!功能不是google-able,我在我的JavaScript代码中找不到它.
以下是Twitter如何使用它:
<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://google.com" data-text="Google says">Tweet</a>
<script>!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");</script>
Run Code Online (Sandbox Code Playgroud)
Sar*_*raz 27
它是自我调用匿名函数的简写或替代:
(function(){
// code
})();
Run Code Online (Sandbox Code Playgroud)
可写:
!function(){
// code
}();
Run Code Online (Sandbox Code Playgroud)
您也可以使用+而不是!.
如果您只是这样做:
function(){
// code
}();
Run Code Online (Sandbox Code Playgroud)
这将产生问题,这就是为什么你需要!在它之前添加将函数声明转换为函数表达式的原因.
ExpressionStatement不能以function关键字开头,因为这可能使其与FunctionDeclaration不一致.
为了更好地理解这个概念,你应该看看:
小智 6
他们否定结果,而不是函数本身:
!function( x ){ return x }( true );
!true
false
Run Code Online (Sandbox Code Playgroud)
实际上,它是以下形式的稍微压缩的形式:
(function(){}())
Run Code Online (Sandbox Code Playgroud)
因为它需要少 1 个字符。需要它的原因是你不能直接调用函数声明,例如这是无效的:
function(){}()
Run Code Online (Sandbox Code Playgroud)
!但在开头添加 the会将其变成一个函数expression并使其工作。