3

修改变量并显示它时,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给出?)1717

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


火狐截图:

在此处输入图像描述

4

2 回答 2

2

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

于 2014-12-11T08:26:39.310 回答
1

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

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

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

于 2014-12-11T08:26:07.170 回答