我正在阅读关于IIFE的article但是觉得它带来的主要价值是它为变量创造了隐私,在下面的代码中,“i”如果置于“i”中则无法更改IIFE。但是命名空间怎么样?如果它们都包含在“计数器”范围内的变量,两者之间有什么区别?
var counter = {
i: 0,
increment: function () {i++;}
};
var counter = (function () {
var i = 0;
return {
increment: function () {i++;}
};
})();
答案 0 :(得分:1)
除非函数选择返回引用,否则无法从声明它的函数外部访问局部变量。由于Javascript只有函数作用域而且没有版本提供namespace
块,因此这是隐藏其他代码变量的唯一方法。
使用ES6引入的其他范围,您可以使用块范围或理想情况下模块范围来简化此操作:
let i = 0;
export default {
increment: function () {i++;}
};