IIFE如何保护命名空间?

时间:2016-03-28 19:37:33

标签: javascript namespaces iife javascript-namespaces namespace-organisation

我正在阅读关于IIFE的article但是觉得它带来的主要价值是它为变量创造了隐私,在下面的代码中,“i”如果置于“i”中则无法更改IIFE。但是命名空间怎么样?如果它们都包含在“计数器”范围内的变量,两者之间有什么区别?

var counter = {
  i: 0,
  increment: function () {i++;}
};

var counter = (function () {
  var i = 0;
  return {
    increment: function () {i++;}
  };
})();

1 个答案:

答案 0 :(得分:1)

除非函数选择返回引用,否则无法从声明它的函数外部访问局部变量。由于Javascript只有函数作用域而且没有版本提供namespace块,因此这是隐藏其他代码变量的唯一方法。

使用ES6引入的其他范围,您可以使用块范围或理想情况下模块范围来简化此操作:

let i = 0;
export default {
  increment: function () {i++;}
};