从IIFE访问变量

时间:2016-09-23 10:51:07

标签: javascript

我有以下关闭:

var Container = (function () {
   var variable;
   var changeVariable = function () {
       variable = 5;
   };
   return {
       variable: variable,
       changeVariable: changeVariable
   };
})();

Container.changeVariable();
console.log(Container.variable);

结果是未定义的,除非我将变量设置为:

Container.variable = 5

为什么会这样?有什么不同?我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

使用getter:

return {
   get variable() { return variable; },
   changeVariable: changeVariable
};

答案 1 :(得分:2)

  

为什么会这样?

JavaScript按值分配。

variable = 5;将值5分配给变量variable

variable: variable,variable(代码运行时 >)的值分配给属性variable。它不会创建对名为variable的变量的引用。

如果稍后更改名为variable的变量的值,则不会更改名为variable的属性的值。

  

我该如何正确地做到这一点?

创建一个对象。在本地存储对象。操纵该对象。归还那个对象。

忘记完全使用名为variable的变量。

var container = (function() {

  var self = {
    variable: undefined,
    changeVariable: changeVariable
  };

  function changeVariable() {
    self.variable = 5;
  }

  return self;
})();

container.changeVariable();
console.log(container.variable);

(旁白:公约保留以构造函数的大写字母开头的标识符。我已重命名Container以遵循该约定。)