Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的模块Javascript代码段在私有变量上返回未定义的值?_Javascript - Fatal编程技术网

为什么我的模块Javascript代码段在私有变量上返回未定义的值?

为什么我的模块Javascript代码段在私有变量上返回未定义的值?,javascript,Javascript,我很难理解为什么我的JS代码段在控制台窗口中返回未定义 var myModule = (function(){ var _myVal; function _setMyVal(arg){ _myVal = arg; } return { myVal : _myVal, setMyVal : _setMyVal }; }()); myModule.setMyVal("ss"); console.log(myModule.myVal);

我很难理解为什么我的JS代码段在控制台窗口中返回未定义

var myModule = (function(){

  var _myVal;

  function _setMyVal(arg){

    _myVal = arg;

  }


  return {
    myVal : _myVal,
    setMyVal : _setMyVal
  };


}());

myModule.setMyVal("ss");

console.log(myModule.myVal);
因为直接设置myModule.myVal实际上是有效的

  return {
    myVal : _myVal,
    setMyVal : _setMyVal
  };
您返回的是_myVal的当前值,而不是您想要的对它的引用。在函数中重新分配变量_myVal后,myModule.myVal仍指向旧值

如果要返回引用,可以使用getter返回它:

  return {
    get myVal() {return _myVal},
    setMyVal : _setMyVal
  };

这就是JavaScript处理变量和对象属性的方式

var x = 2;
var y = {x: x};   // at this point, y.x is set to the number two,
                  // it bears no reference to the variable x

console.log(x, y.x); // 2 2

x = 3

console.log(x, y.x); // 3 2

myModule是一个已经被调用的IILife,将myVal设置为Undefined答案很好,虽然我不喜欢“get”关键字,但我没有看到太多,担心它会让人困惑。我已经重构为两种方法,因为它看起来更正交。。。。getter将“get”隐藏在内部函数中。getReferences:_getReferences,setReferences:_setReferences