在认识IIFE以前先了解一下建立函数的两种方法:函数表达式/函数声明javascript
function test(){
//函数内容
}
test();
复制代码
Function Declaration 能够定义命名的函数变量,而无需给变量赋值。
必要条件:html
Function Expression 将函数定义为表达式语句(一般是变量赋值)的一部分。Function Expression 不能以“function”开头.
经过 Function Expression 定义的函数能够是命名的,也能够是匿名的。
如下是匿名函数表达式:java
var test=function(){
//函数内容
}
test();
复制代码
如下是命名函数表达式:express
var sub = function f(a1,a2){
return a1-a2;
}
console.log(f(5,3)); //错误调用方式
console.log(sub(5,3)); //正确调用方式
复制代码
在这个例子中,函数表达式的名称为f,这个名称f实际上变成了函数内部的一个局部变量,而且指代函数对象自己,在函数递归的时候有很大用处。segmentfault
释义:定义函数以后,当即调用该函数,这种函数就被称做当即执行函数,全称为当即调用的函数表达式 IIFE=Imdiately Invoked Function Expression
函数表达式经过末尾的() 来调用并运行就是一个IIFE。
经常使用写法:闭包
(function(){ /* code */ }());
(function(){ /* code */ })();
void function(){ /* code */ };
复制代码
其余写法:函数
var i = function(){ return 10; }();
true && function(){ /* code */ }();
0, function(){ /* code */ }();
!function(){ /* code */ }();
~function(){ /* code */ }();
-function(){ /* code */ }();
+function(){ /* code */ }();
new function(){ /* code */ };
new function(){ /* code */ }();
复制代码
这么写的缘由?性能
不让function出如今行首,让引擎将其理解成一个表达式
(javascript引擎规定,若是function关键字出如今行首,一概解释成函数声明语句)ui
IIFE做用
IIFE的目的是为了隔离做用域,防止污染全局命名空间。spa
参考:
JavaScript中函数声明与函数表达式的区别详解
JavaScript 函数表达式
理解 JavaScript(二)(关于理解函数做用域和变量/对象提高的一篇文章)
说一说JS的IIFE关于IIFE解释比较简洁易懂
IIFE对IIFE写法的性能及最佳实践有所举例
深刻理解闭包系列第三篇——IIFE
JavaScript:当即执行函数表达式(IIFE)一篇译文
当即执行函数: (function ( ){...})( ) 与 (function ( ){...}( )) 有什么区别?
JavaScript的()()原理是什么 汤姆大叔javascript深刻理解