码迷,mamicode.com
首页 > 其他好文 > 详细

立即调用的函数表达式---IIFE

时间:2015-10-25 13:42:21      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

有些人则称为“自执行的匿名函数”

在闭包中,我们经常需要使用到匿名函数,我感觉闭包就是一种匿名函数,子集。

但是直接在匿名函数后面调用函数是会出错的。比如:

function () {
    alert("Hello IIFE");
}();
// Uncaught SyntaxError: Unexpected token (

我们期望系统立即调用这个匿名函数,但是系统会以为我们是在进行函数声明,进行函数声明需要有函数名称。而上面则没有,就会报错。

那么我们为它添加函数名咯,还会有一个小问题,如下:

1 function f() {
2     alert("IIFE");            
3 }();
4 // Uncaught SyntaxError: Expected () to start arrow function, but got ‘;‘ instead of ‘=>‘
期望是立即调用一个具名函数表达式,结果是声明了函数 f。末尾的括号作为分组运算符,必须要提供表达式做为参数

那么我们应该如何创建一个自执行的匿名函数呢?我们可以让引擎理解()前面的是一个表达式而不是一个函数,写法如:

(function () {
    alert("IIFE");
})();
//或者
(function () {
    alert("IIFE");    
}());

我们为匿名函数添加括号之后,被解析器解析为表达式,那么我们也可以这样使用:

 1 [ function () {}()];
 2 
 3 ~ function () {}();
 4 ! function () {}();
 5 + function () {}();
 6 - function () {}();
 7 
 8 new function () {};
 9 new function () {}() ;
10 
11 var i = function () {}();
12 
13 0, function () {}();
14 true && function () {}();

大家有什么补充的话请留言哈,么么哒~~~

以上内容参考:

来源:阮一峰javascript:http://javascript.ruanyifeng.com/grammar/function.html#toc23

来源:知乎 长天之云 http://www.zhihu.com/question/20249179/answer/14487857

 

立即调用的函数表达式---IIFE

标签:

原文地址:http://www.cnblogs.com/maczyt/p/4908624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!