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

mor*_*des 5 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

joh*_*ton 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