Javascript知识点:IIFE - 当即调用函数

Immediately-invoked Function Expression(IIFE,当即调用函数),简单的理解就是定义完成函数以后当即执行。所以有时候也会被称为“自执行的匿名函数”(self-executing anonymous function)。javascript

IIFE的叫法最先见于Ben Alman的文章。文章中Ben Alman 已经解释得很清楚了,但愿定义自执行函数式常见的语法错误有两种:html

1) function (){ }()java

指望是当即调用一个匿名函数表达式,结果是进行了函数声明,函数声明必需要有标识符作为函数名称。express

2) function g(){ }()ide

指望是当即调用一个具名函数表达式,结果是声明了函数 g。末尾的括号做为分组运算符,必需要提供表达式作为参数。
因此那些匿名函数附近使用括号或一些一元运算符的惯用法,就是来引导解析器,指明运算符附近是一个表达式。函数

按照这个理解,能够举出五类,超过十几种的让匿名函数表达式当即调用的写法:code

1)使用括号htm

( function() {}() );
( function() {} )();
[ function() {}() ];

2)使用一元操做符blog

~ function() {}();
! function() {}();
+ function() {}();
- function() {}();

3)使用void等操做符ip

delete function() {}();
typeof function() {}();
void function() {}();

4)使用表达式

var i = function(){ return 10; }();
14.true && function(){ /* code */ }();
15.0, function(){ /* code */ }();
1 ^ function() {}();
1 > function() {}();

5)使用new关键字

new function(){ /* code */ }

31.new function(){ /* code */ }() //若是没有参数,最后的()就不须要了

可是整体来讲,比较常见的是以下三种写法:

// Crockford's preference - parens on the inside
(function() {
  console.log('Welcome to the Internet. Please follow me.');
}()); 

(function() {
  console.log('Welcome to the Internet. Please follow me.'); 

})(); 

!function() {

  console.log('Welcome to the Internet. Please follow me.'); 

}();

其实讨论IIFE的多少种写法多少和研究茴香豆的“茴”字有几种写法同样无聊,但其实不无用处,至少在阅读别人的代码时见到这样的写法不至于不知所云,抑或能够拿出去和小伙伴们装装,顿时以为逼格提高很多。

参考资料:

http://benalman.com/news/2010/11/immediately-invoked-function-expression/(中文译文:http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html

http://www.elijahmanor.com/angry-birds-of-javascript-red-bird-iife/(中文译文:http://nuysoft.com/2013/04/15/angry-birds-of-javascript-red-bird-iife/Immediately-invoked%20Function%20Expression

http://www.zhihu.com/question/20249179

相关文章
相关标签/搜索