Javascript Closure Instance confusion

时间:2015-07-13 07:03:25

标签: javascript

我有一个使用模型/视图/控制器结构的大型javascript单页应用程序。从服务器接收数据时,会创建一个模型并将其传递给视图的实例。每隔一段时间,非常非常罕见地,使用先前版本的模型对象来实例化视图。下面是一个简化的代码示例。

ObjectA = function (model) {
    var objA = {};
    objA.doTask = function () {
      model.counter += 1;
      if (window.model.created !== model.created){
        console.log("Global model not my instance model");
        debugger;
      }
      console.log(model.version);
    };
    return objA;
};

var model;
model = {version:0, counter:0, created:0};
model.created = new Date().getTime();
window.model = model;


var objAInstance = ObjectA(model);
objAInstance.doTask();

var i, instance;
for (i = 1; i < 100; i+=1) {
  model = {version:i, counter:0};
  model.created = new Date().getTime();
  window.model = model;
  instance = ObjectA(model);
  instance.doTask();
}

你会希望这段代码能够在控制台上打印0-99,但有时在我的应用程序中,doTask修改的模型对象是一个我认为应该超出范围的旧版本。

为了帮助追踪问题,我抛出了我认为应该是窗口对象上应用程序的当前全局模型,并比较创建日期!果然我的ObjectA实例中有旧模型了!

有人知道Chrome可能会做的一些奇怪的缓存或优化会导致这种情况吗?为什么间歇性地发生这种情况?

0 个答案:

没有答案