-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
写法
立即执行函数习惯推荐写法在前面加;
;(function(){
......
}()) // W3C推荐写法
或
;(function(){
......
})()
优点
自动执行完后立即释放内存
以下代码中的add函数
一直存在于GO
中,执行完后add
也不释放
console.log(add(1, 1));
function add(a, b) {
return a + b;
}
IIFE执行完后就释放了
const add = (function () {
console.log(1);
}());
console.log(add); // undefined
如果想保留值,可以reture
出去存在变量里
const add = (function (a, b) {
return a + b;
}(1, 1));
console.log(add); // 2
拓展
一、当有多个函数的时候,以最后一个为准
const add = (
function (a, b) {
return a + b;
},
function (a, b) {
return a - b;
}
)(1, 1);
console.log(add); // 0
二、IIFE的函数名是被忽略的
var a = 10;
if(function b(){}) { // 相当于 (function b(){}),所有b相当于没有,
a += typeof b;
}
console.log(a); // 10undefined
!function b(){}
+function b(){}
-function b(){}
// 上面3个形式的IIFE都是一样的,b被忽略
console.log(b); // b is not defined
三、arguments
普通函数传参的arguments
如下
function foo1(x){
console.log(arguments); // 1, 2, 3, 4
return x;
}
console.log(foo1(1, 2, 3, 4)); // 1
不是IIFE,不执行
function foo1(x){
console.log(arguments);
return x;
}(1, 2, 3, 4) // (1, 2, 3, 4)无意义
IIFE的arguments
(function foo(x){
console.log(arguments); // 1, 2, 3, 4
return x;
})(1, 2, 3, 4)