关于立即执行函数IIFE

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

(function(){

})()

这其实就是IIFE(立即执行的函数表达式)
这个大家应该都遇见过,不过不知道大家第一次看到这个时会不会想这样写有什么用途?一般是用在什么地方?

IIFE有什么用途

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

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

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

IIFE一般用在什么地方

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

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

一般怎么写IIFE

推荐

(function(){
  'use strict';

  // Code goes here

}());
(function($, w, d){
  'use strict';

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

ES6中使用let取代IIFE

ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。如果我们只是在某个代码块中使用某个变量,我们可以使用let,再也不需要使用IIFE了:

{
 let private = 1;
}
console.log(private); // 未捕获 ReferenceError
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容