您的位置:首页 > Web前端

IIFE

2016-05-14 09:06 295 查看

Immediately Invoked Function Expression

立即执行函数表达式

'use strict';

var a = 2;

(function foo(){
var a = 3;
console.log(a);    //  3
})();

console.log(a);    //  2


第一个()将函数变成表达式

第二个()执行了这个函数

立即执行函数和普通的函数一样,在自己的函数内声明的变量会覆盖外层词法作用域声明的变量

最好使用具名函数

// the same
(function bar(){
console.log(a);    //  2
}());
// 在自己的词法作用域内找不到a,所以找上一层作用域的a,找到,拿来用


进阶用法

'use strict';

var a = 2;
(function IIFE(global){
var a = 3;
console.log(a);    //  3
console.log(global.a);    //  2
})(window);

console.log(a);    //  2


因为觉着方便,一直在node里调试,结果你懂的

window is not defined

我一定是傻了 >_

还有一种传参

《你不知道的JavaScript》书里

IIFE还有一种变化的用途是倒置代码的运行顺序,将需要运行的函数放在第二位,在IIFE执行之后当作参数传递进去。这种模式在UMD(Universal Module Definition)项目中被广泛使用。

我嚼着就是把函数当作参数穿进去,还是传参,只不过传的函数而已

'use strict';

var a = 2;

(function( def ){
def(window);
})(function def(global){
var a = 3;
console.log(a);
console.log(global.a);
});
// 3
// 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数