0

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

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

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

1 回答 1

1

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

使用 ES6 引入的其他作用域,您可以使用块作用域或理想情况下的模块作用域来简化这一点:

let i = 0;
export default {
  increment: function () {i++;}
};
于 2016-03-28T19:40:08.217 回答