话题 首页 > JavaScript 教程 > JavaScript 教程话题列表 > 详情

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

精华
鹏鱼燕 2016-10-20 11:33:52 浏览(7464) 回复(5) 赞(0)
一般看JQuery插件里的写法是这样的 . ``` (function($) { //... })(jQuery); ``` 今天看到bootstrap的javascript组件是这样写的 ``` !function( $ ){ //... }( window.jQuery ); ``` 为什么要在前面加一个 " ! " 呢?
javascript jquery

回答(5)

2016-10-20

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

function fnA(){alert('msg');}//声明式定义函数
var fnB = function(){alert('msg');}//函数赋值表达式定义函数

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

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

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

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

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

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

推荐阅读: 《 function与感叹号》

xdsnet 2016-11-21

这句话如果拆解开其实是

  1. 定义了一个有参数匿名函数

  1. 这个匿名函数以实参 hljs javascript window .jQuery 执行了一次

3.这个匿名函数执行后有返回值,但被!取反了(不过这里返回值没有再利用)。

其实这里关键的是前两部工作。

一笔荒芜 2018-05-31

留名留名!!!,同样的问题,看看咋结局!!!

1144100656 2018-05-31

留名留名!!!,同样的问题,看看咋结局!!!

1152696398 2018-05-31

好慢呀,空空如也,半天不来大神解决,大佬在哪啦

要回复,请先登录 或者注册