2019-01-21
回答
这种技术在 JavaScript 库中非常常见,他可以围绕文件中的上下文创建一个闭包环境,为这个文件创建私有的命名空间。这样就可以避免不同的 JavaScript 模块和库在命名上产生冲突。函数被立即调用,就可以将函数的返回值赋给命名空间(库名)。
const myLibrary = (function() {
var privateVariable = 2
return {
publicMethod: () => privateVariable
}
})()
myLibrary.publicMethod() // 2
加分回答
- 立即执行的匿名函数除了提供私有命名空间外,还提供了数据隐藏、封装、多实例等面向对象编程的特性。如:
var makeCounter = function() {
var privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment: function() {
changeBy(1);
},
value: function() {
return privateCounter;
}
}
};
var Counter1 = makeCounter();
var Counter2 = makeCounter();
Counter1.increment();
console.log(Counter1.value()); // 1
console.log(Counter2.value()); // 0
- 以前很多流行的库(如:jQuery)都使用过该技术,但随着 JavaScript 版本的更新,都逐渐被
import
,class
取而代之了。