为什么,为什么,我在以下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);
更新:
我发现了问题:当你从一个函数返回一个全局时,你基本上会覆盖全局。因为将来其他人可能会受此影响,我在这里写了一个例子:
答案 0 :(得分:0)
肯定对JS null对象进行属性/方法调用会导致undefined,因为null是一个预定义的JS对象类型,显然没有你的方法/属性backgroundColor?我本来可以发表评论,但出于某种原因......