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

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

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

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

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

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

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

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

最新文章

  1. [自己动手玩黑科技] 1、小黑科技——如何将普通的家电改造成可以与手机App联动的“智能硬件”
  2. 创建数据库和表的SQL语句【转】
  3. DZ的伪静态神马的终于OK了
  4. 回退符\b
  5. totolink的n200r路由在卓越网和京东网的价钱
  6. rand,randn,randi函数区别
  7. Arduino周边模块:执行部件(舵机、直流电机、步进电机)
  8. 二分法习题HDU2199
  9. FileReader和BufferedReader的区别
  10. RocketMQ事务消息回查设计方案
  11. ffmpeg命令的使用
  12. 7z 程序打包 Demo
  13. FFMPEG详细参数
  14. git rebase 合并提交 解决超过100M文件的提交不能推送问题
  15. Jquery学习(二)
  16. 超薄二维Mo2C晶体
  17. web中浏览PDF文件
  18. JS日期、月份的加减
  19. 华硕N43sl VNP 连接问题 800 807 621
  20. how to create view (windows)

热门文章

  1. eclipse修改端口启动多个tomcat
  2. shell 计算文件交并差
  3. js动态添加和删除标签
  4. BZOJ3668/UOJ2 [NOI2014]起床困难综合症
  5. 闲聊SEO
  6. R树的相关知识
  7. 存储过程,游标,异常捕捉 try catch 实例代码
  8. lucene搜索之facet查询原理和facet查询实例——TODO
  9. LKDBHelper Sqlite操作数据库
  10. redhat5.8 alt+ctrl+f1 黑屏