Javascript 未定义重构函数和变量
我对任何编码都很陌生,所以如果这个问题看起来很容易查找,我很抱歉,但我不确定在这里查找什么 我在这里要做的是创建div,并将其放在“level”div(或var头)之前。然后我想在那个div中放一个图像。最后我想放三个图像在那个里,所以我试着重构一下,这样它就不会是一个很长的函数(我确信这不是干巴巴的,而是很小的步骤)。下面的代码不起作用,因为没有定义“medalDiv”。当我从awardTimeMedal()插入代码而不是调用函数时,它工作正常。我不确定这是否是一个范围问题,但我认为因为medalDiv是在awardMedal()中定义的,所以awardTimeMedal可以访问它Javascript 未定义重构函数和变量,javascript,dom,Javascript,Dom,我对任何编码都很陌生,所以如果这个问题看起来很容易查找,我很抱歉,但我不确定在这里查找什么 我在这里要做的是创建div,并将其放在“level”div(或var头)之前。然后我想在那个div中放一个图像。最后我想放三个图像在那个里,所以我试着重构一下,这样它就不会是一个很长的函数(我确信这不是干巴巴的,而是很小的步骤)。下面的代码不起作用,因为没有定义“medalDiv”。当我从awardTimeMedal()插入代码而不是调用函数时,它工作正常。我不确定这是否是一个范围问题,但我认为因为med
//doesn't work
function awardMedal(){
var medalDiv = document.createElement("div");
awardTimeMedal();
var header = document.getElementById("level");
header.insertBefore(medalDiv, header.childNodes[0]);
}
function awardTimeMedal(){
var timeMedal = document.createElement("img");
timeMedal.src = properties.MEDAL_OFF;
timeMedal.className = "medals";
medalDiv.appendChild(timeMedal);
return medalDiv;
}
//works
function awardMedal(){
var medalDiv = document.createElement("div");
var timeMedal = document.createElement("img");
timeMedal.src = properties.MEDAL_OFF;
timeMedal.className = "medals";
medalDiv.appendChild(timeMedal);
var header = document.getElementById("level");
header.insertBefore(medalDiv, header.childNodes[0]);
}
我也试过,但没有“返回麦道夫”的声明
谢谢。如果我没有遵守任何适当的礼仪,我很抱歉,并感谢您的帮助
编辑:好的,这是有道理的。非常感谢。var medalDiv是awardMedal的本地版本,用于awardTimeMedal。将其放在全局范围内访问。您的第一个功能不起作用的主要原因是
awardTimeMedal
无法访问medalDiv
我相信更好的方法是返回awardTimeMedal
元素并将其附加到awardMedal
函数中,如下所示:
function awardMedal(){
var medalDiv = document.createElement("div");
var timeMedal = awardTimeMedal();
medalDiv.appendChild(timeMedal);
var header = document.getElementById("level");
header.insertBefore(medalDiv, header.childNodes[0]);
}
function awardTimeMedal(){
var timeMedal = document.createElement("img");
timeMedal.src = properties.MEDAL_OFF;
timeMedal.className = "medals";
return timeMedal;
}
更新前一个函数
function awardMedal(){
var medalDiv = document.createElement("div");
awardTimeMedal(medalDiv);
var header = document.getElementById("level");
header.insertBefore(medalDiv, header.childNodes[0]);
}
function awardTimeMedal(medalDiv){
var timeMedal = document.createElement("img");
timeMedal.src = properties.MEDAL_OFF;
timeMedal.className = "medals";
medalDiv.appendChild(timeMedal);
return medalDiv;
}
问题是,当调用
awardTimeMedal()
时,必须将返回值存储在一个变量中,以便从调用过程中访问它,即awardMedal()
。所以
var ref = awardTimeMedal();
现在,您可以使用ref附加到正确的元素。
仅供参考,无论何时使用var或function关键字,它都会在JavaScript中创建一个新的词法范围。这意味着当前范围与新引入的范围严格绑定。当您尝试访问该范围内的变量或引用时,编译器将查看该范围的堆栈,如果未找到引用的变量,则在父范围内。父范围通常解析为文档(如果未明确防范)