关于立即执行函数IIFE

今天来简单聊一聊最近写毕设用的非常多的IIFE。
首先来看一段javascript

1
2
3
(function(){

})()

这其实就是IIFE(立即执行的函数表达式)
不知道大家写这个之前会不会想这样写有什么用途?一般是用在什么地方?

IIFE有什么用途

1.总是将代码包裹成一个 IIFE(Immediately-Invoked Function Expression),用以创建独立隔绝的定义域。这一举措可防止全局命名空间被污染。
所谓不去污染全局命名空间,是因为 IIFE 创建了一个新的函数作用域,你真正的业务代码被封装在其中,自然就不会触碰到全局对象了。如果你需要全局对象,那就 pass 给 IIFE:

1
2
3
(function (global) {
// 在这里,global 就是全局对象了
})(this) // 在浏览器里,this 就是 window 对象

2.IIFE 还可确保你的代码不会轻易被其它全局命名空间里的代码所修改(i.e. 第三方库,window 引用,被覆盖的未定义的关键字等等)。

IIFE一般用在什么地方

1.无论何时,想要创建一个新的封闭的定义域,那就用 IIFE。它不仅避免了干扰,也使得内存在执行完后立即释放。

2.所有脚本文件建议都从 IIFE 开始。

一般怎么写IIFE

推荐

1
2
3
4
5
6
(function(){
'use strict';

// Code goes here

}());
1
2
3
4
5
6
7
(function($, w, d){
'use strict';

$(function() {
w.alert(d.querySelectorAll('div').length);
});
}(jQuery, window, document));