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
取而代之了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于