IIFE -> immediately-invoked function expression
立即执行,执行完之后立即释放,可用作初始化函数
写法:
第一种:
(function (){
...
})();
//或者使用具名函数
(function test(){
...
})();
第二种:
(function (){
...
}()); //w3c建议写法
//或者使用具名函数
(function test(){
...
}());
拿到立即执行函数的返回值
var num = (function (a, b) {
return a+b;
}(2, 4));
一些奇怪的写法
第一种:
var test = function (){
console.log(123);
}(); //不会报错
第二种:
function test(){
console.log(123);
}(); //会报语法错误
解释为什么第一种可以执行,而第二种不可以?
因为()
(函数执行符号)前面跟函数表达式会执行函数。
将函数声明转换成函数表达式的方法:在函数声明前面加+, -, !, ||, &&
1 && function test(){
console.log(1); //1
}();
第三种:
function test(a, b){
console.log(a, b);
}(3, 4); //不报错,因为js引擎把它解析成表达式
function test1(a, b){
console.log(a, b);
}(); //报错
总结:将函数声明转换成函数表达式就可以使用()
(函数执行符号)执行了。