函数内部称为“undefined”的全局变量

时间:2012-02-23 20:48:39

标签: javascript

为什么,为什么,我在以下Javascript代码上获得“未定义”?

我有2个功能。第一个叫做onmouseover,它会更新一个全局变量,它是我们刚刚发现的DOM元素的引用。我想突出显示DOM元素,而它是当前的引用,所以我改变了它的backgroundColor及其边框。但是,一旦我将鼠标悬停在下一个DOM元素上,我就会想要将backgroundColor和border重置为原始状态(我们刚刚离开的前一个DOM元素)。

在第二个函数中,在第一个函数中调用,我尝试保存这个全局引用的一些样式信息。但是,在第二个函数内部,当我尝试使用变量(currentEditingReference)时,我被告知该变量是“未定义的”。

我将变量“currentEditingReference”作为参数传递给第二个函数的代码重新编写,并在该函数内部给出了不同的名称,但我仍然得到相同的错误,即“未定义”。这是FireBug向我展示的错误:

currentEditingReference is undefined
backupStyleInfoObject.backgroundColor = currentEditingReference.style.backgroundColor; 
Line 313

我发现这太棒了。我不确定我是否遇到了Javascript范围规则的一些奇怪特征,或者这是否是某种复制引用问题。

在第二个函数storeTheOriginalCssAttributesOfThisDomElement中,currentEditingReference似乎被视为局部变量,即使我在页面顶部,在全局空间中定义它,如:

var currentEditingReference = null;

我不应该在我定义为null的变量上获得“undefined”。 Null和undefined是Javascript中的两种不同类型。

我有几十个函数,我使用currentEditingReference作为全局变量,但由于某种原因,在这一个函数中,我似乎无法使用它。为什么呢?

格式化显示在StackOverflow上的代码结果很麻烦,所以我在这里发布了代码:

http://www.krubner.com/stackoverflow.html

更新:

FireFox错误是否可能完全错误?我现在在第4行得到“currentEditingReference is undefined”,这应该是不可能的,因为currentEditingReference之前只定义了3行。

currentEditingReference = eventTargetRef;

currentEditingReference = addUniqueIdToAnElement(currentEditingReference);

var newObjectToStoreDataFromCurrentReference = new Object();

newObjectToStoreDataFromCurrentReference.style = currentEditingReference.style;

newObjectToStoreDataFromCurrentReference.id = currentEditingReference.id;

storeTheOriginalCssAttributesOfThisDomElement(newObjectToStoreDataFromCurrentReference);

更新:

我发现了问题:当你从一个函数返回一个全局时,你基本上会覆盖全局。因为将来其他人可能会受此影响,我在这里写了一个例子:

http://www.krubner.com/javascript_scope_example.html

1 个答案:

答案 0 :(得分:0)

肯定对JS null对象进行属性/方法调用会导致undefined,因为null是一个预定义的JS对象类型,显然没有你的方法/属性backgroundColor?我本来可以发表评论,但出于某种原因......