匿名函数相关

自执行函数的三种写法

第一种:

(function(){
    //...
 }();
//常见写法,JQuery所采用
第二种:
(function(){
    //...
 ()};
第三种:
!function(){
    //...
 ();
//// 但在前面加上一个布尔运算符(只多了一个感叹号),就是表达式了,将执行后面的代码,也就合法实现调用。在前面加上~+-等一元操作符也可以。。其实还有好几种符合都可以保证匿名函数声明完就立即执行
第三种为什么那么写?

我们都知道函数声明有两种方式:

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

前面的自执行函数都是匿名函数。通常,我们调用一个方法的方式就是 FunctionName()。但是,如果我们尝试为一个“定义函数”末尾加上(),解析器是无法理解的。

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

如果将函数体部分用()包裹起来就可以运行并且解析器是不报错的,如:

(function($) {         
 //...  
})(jQuery);```
那为什么将函数体部分用()包裹起来就可以了呢?
原来,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。
另外,用 ! 可能更多的是一个习惯问题,不同的运算符,性能是不同的。

[更多参考链接](http://swordair.com/function-and-exclamation-mark/)http://swordair.com/function-and-exclamation-mark/
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 5,020评论 1赞 19
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,197评论 19赞 139
  • 图书馆后面的螺旋形露天台阶顶上有一扇门,打开这扇门可以来到图书馆楼顶,全校最高的地方。 穿过潮湿泥泞的草地,经过一...
    恶童阅读 720评论 1赞 4
  • 我的伪装就是眼泪在子夜中的宣泄,我的伪装就是在微笑背后的倔强,只是我的伪装都被人看透,只有我自己沉醉在其中。 我记...
    陈大伯说阅读 583评论 0赞 9
  • 朝代:魏晋作者:陶渊明人生无根蒂,飘如陌上尘。分散逐风转,此已非常身。落地为兄弟,何必骨肉亲!得欢当作乐,斗酒聚比...
    少小爱编程阅读 507评论 1赞 3

友情链接更多精彩内容