揭示模块模式内部外部变量不匹配

时间:2016-10-27 05:23:25

标签: javascript revealing-module-pattern

<html><body><button>setSpeed</button>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script>

$(document).ready(function(){
  $('button').on('click', function(){
    _.setSpeed();
    console.log('_.slow: ' + _.slow);
  });
});

var _ = (function(){
  var slow = 4;
  
  function setSpeed(){ 
    if (slow == 4) {
      slow = 1;
    } else if (slow == 1){
      slow = 16;
    } else {
      slow = 4;
    }
    console.log('slow: '+ slow);
  }
  return { slow: slow, setSpeed: setSpeed };

})();

</script></body></html>

我不明白为什么console.log for slow和_.slow不匹配?我错过了什么?

通过在IIEF中返回var slow和function setSpeed,我认为它们应该匹配。

1 个答案:

答案 0 :(得分:1)

执行此操作时:

return { slow: slow, setSpeed: setSpeed };

您正在创建一个包含两个属性slowsetSpeed的新对象。 slow的值是从var slow分配的。由于这是一种原始类型(不是参考值),因此您将获得当前值slow(4)的副本。

当您调用setSpeed时,它会修改var slow将其更改为1.这不会影响_.slow(因为它不是参考)。