萤火虫错误地告诉我我的变量没有定义

时间:2010-07-21 18:13:35

标签: javascript firebug

我在下面的代码中设置一个断点,它表示“断点”。还为dataStore添加了一个监视表达式。

function(){
  var self = {};
  var dataStore = [];
  var areEq = UNAB.objectsAreEqual;

  self.put = function(key, value){
    /*breakpoint*/ dataStore.push({key:key, value:value});
  }
  return self;
}

在这个断点处,Firebug告诉我“ReferenceError:dataStore未定义”。尝试检查“areEq”时的结果相同。但是,dataStore.push执行时没有错误。一个额外的strangness:为“self”添加一个监视表达式不会显示我期望的自我对象,只有一个属性“put”,而是“window”对象。

知道到底发生了什么事吗?

2 个答案:

答案 0 :(得分:1)

可能self正在由Firebug解决,也可能由Firefox在全局范围内解析为当前窗口。如果您选择“自我”以外的其他名称,您的代码应该让每个人都满意。

答案 1 :(得分:1)

我认为这是一个firefox错误。如果设置断点   var dataStore = []; 然后继续,当在put()中击中断点时。你得到一个闭包范围(在Firebug 1.6中)。该范围有dataStore和self。我认为Firefox正在优化封闭范围,可能因为代码无意义:没有办法访问dataStore。

最终将出现一个完整的测试用例 http://getfirebug.com/tests/script/stackoverflow/dataStoreIsNotDefined.html

另见https://developer.mozilla.org/en/DOM/window.self