JS控制台显示错误结果

时间:2014-12-11 08:18:47

标签: javascript firefox module-pattern revealing-module-pattern

在修改变量并显示变量(live demo here)时,我对Firefox有一种奇怪的行为:

var MyModule = ( function() {
  var currentPosition = {x : 1, y : 2, z : 3};

  function changePosition() { currentPosition.x = 17; };

  return { changePosition : changePosition,    
           currentPosition : currentPosition };  
} )();

console.log(MyModule.currentPosition);  // 17, 2, 3 instead of 1, 2, 3 !!
MyModule.changePosition();
console.log(MyModule.currentPosition);  // 17, 2, 3

为什么会发生这种情况?current.Position为什么17在修改为17之前提供{{1}}?)

更一般地说,如何在揭示模块模式中获取/设置变量?


使用Firefox的屏幕截图:

enter image description here

2 个答案:

答案 0 :(得分:2)

我猜你是一个接一个地跑了3行,当你检查第一行打印的行时,旁边有一个i。 Chrome会在打印时报告对象的最新属性,而不是它们的值,所以如果您只是打印currentPosition而不是运行changePosition(),那么您会看到1,2,3。

答案 1 :(得分:1)

看起来Firefox拥有对象的引用,当你检查它时,你会看到它在两种情况下的修改状态 下次您可以在该行上设置断点并在那里观察变量。根据我的经验,这是更可靠的。 当您将日志语句更改为记录值而不是对象时,它将始终像预期的那样工作。

console.log(MyModule.currentPosition.x);
MyModule.changePosition();
console.log(MyModule.currentPosition.x);

关于模块模式。你实现它应该像它应该:) This是我的javascript模式的第一来源。 - > Module pattern