匿名函数、自执行函数,自执行匿名函数和立即执行的函数表达式区别
今天在写代码的时候发现对自执行函数有点懵,便去查询资料。然后紧接着自执行匿名函数,立即执行函数,匿名函数一窝蜂的出来了,借此就好好谈谈这几个函数的区别吧。
匿名函数
匿名函数比较好理解,顾名思义就是没有名字的函数
//普通函数:此函数声明了一个名为a的函数。
function a(){
return 1;
};
//匿名函数:这时你会发现报错了
function(){
return 1;
};
这时你会发现单独运行一个匿名函数,由于不符合语法要求,会报错。解决方法:只需要用()把匿名函数包起来即可
(function(){
return 1;
};)
自执行函数,立即执行的函数
在介绍这里之前,我们先聊一聊"自执行"这个说法,关于”自执行“每个人理解不一样,有人称他为:自动执行,也有称作:立即调用,在这里我比较认同另一种说法:立即调用的函数表达式。
什么是自执行?
我们创建了一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量,因此在执行完后很快就会被释放,关键是这种机制不会污染全局对象。
自执行函数,即定义和调用合为一体。
//对于函数表达式,在后面加括号即可以让函数立即执行;例如下面这个函数,至于为什么加了括
号就可以立即执行,我们可以这么理解,就是像f();这样写的话,函数 可以立即执行是没问题的
,我们在经常会用到,那么对于函数表达式来说,fn1就是对后面的匿名函数的一个引用,因此在
后面的匿名函数后直接加括号,自然也就可以立即执行
var f = function(){
console.log("ss");
}();
自执行函数的其他几种写法
我个人推荐第一种写法,好处是,能提醒阅读代码的人,这段代码是一个整体。
//方法1:最前最后加括号
(function(){
alert(1);
}());
//方法2:function外面加括号
(function(){
alert(1);
})();
方法3:function前面加运算符,常见的是!与void 。
!function(){
alert(1);
}();
void function(){
alert(2);
}();
在参考了多个网站总算将这些理念弄清楚一些。
参考网址:
http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html
https://www.cnblogs.com/jessiespur/p/9283101.html
https://www.jianshu.com/p/1d52ed86d52c