在修改变量并显示变量(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的屏幕截图:
答案 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