今天去看了一个GITHUB上的开源项目,在客户端JS的脚本编写的时候,代码中多次使用了IIFE
。
一开始我是懵逼的,不知道这种函数的意义何在,小菜鸟嘛。
后面我去研究了一番。发现了它的主要作用就是:让变量私有化
这里给出一个例子:
(function () {
var foo = "bar";
// Outputs: "bar"
console.log(foo);
})();
// ReferenceError: foo is not defined
console.log(foo);
当然,这些是可以使用普通命名函数就能做到的事,凭什么就要IIFE
。
那么我们为什么还要用IIFE呢?我抱着这个问题,又去实践了一番,发现了IIFE
除了它的主要作用外,还有以下三个优点:
- 避免了在全局中使用命名空间。因为
IIFE
可以用匿名函数直接运行。楼主你可以把foo去掉直接运行。 - 使用IIFE是自运行的,而不需要你再次去调用,英文中说的是:self-documenting,。
- 普通命名函数,不是立即运行的,你可能会在某个地方错误调用它。
然而,现在是ES6
的时代了,有了块级作用域的出现,这种函数的作用已经被let、const
替代了,所以能看见他们出现的场景不多了。
但是,知道技术是为什么设计出来的还是很不错的。