您好,匿名用户
随意问技术百科期待您的加入

javascript里function之前加上感叹号 ' ! ' 会怎么样?

0 投票

一般看JQuery插件里的写法是这样的

(function($) {         
  //...  
})(jQuery);

今天看到bootstrap的javascript组件是这样写的

!function( $ ){
  //...
}( window.jQuery );

为什么要在前面加一个 " ! " 呢?

用户头像 提问 2012年 12月1日 @ Blitzcrank 上等兵 (358 威望)
分享到:

1个回答

0 投票
 
最佳答案

我们都知道,函数的声明方式有这两种

function fnA(){alert('msg');}//定义函数
var fnB = function(){alert('msg');}//匿名函数

楼主问题中出现的两个函数,都是匿名函数。通常,我们调用一个方法的方式就是 FunctionName()

但是,如果我们尝试为一个“定义函数”末尾加上(),解析器是无法理解的。

function msg(){
  alert('message');
}();//解析器是无法理解的

定义函数的调用方式应该是 msg() ; 那为什么将函数体部分用()包裹起来就可以了呢?

原来,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。

另外,用 ! 可能更多的是一个习惯问题,不同的运算符,性能是不同的。

这些有一篇非常详细的文章,推荐阅读:http://www.swordair.com/blog/2011/10/...

用户头像 回复 2012年 12月1日 @ Udyr 上等兵 (341 威望)
选中 2012年 12月1日 @Blitzcrank
提一个问题:

相关问题

0 投票
1 回复 72 阅读
用户头像 提问 2012年 12月1日 @ Galio 上等兵 (289 威望)
0 投票
1 回复 32 阅读
用户头像 提问 2013年 12月19日 @ 阿尔托莉雅 下士 (587 威望)
0 投票
1 回复 33 阅读
用户头像 提问 2012年 12月1日 @ Caster 上等兵 (256 威望)
0 投票
1 回复 27 阅读
用户头像 提问 2014年 3月1日 @ Lady 上等兵 (162 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...