我正在为实习工作一大堆软件,我的任务是为系统增加功能,根据现有的奖品和卡片数量建立一个奖励等级表。
我进入添加行的功能,我发现了一对非常奇怪的声明。我将发布该功能本身,以免缺乏上下文抑制答案。 我已经搜索过" cast"," array"的各种组合。和"数字"但似乎没有任何东西与这种做法有关。
this.addNewTableRow = function(){
var request = new XMLHttpRequest();
awardLevel = this.length + 1;
request.onreadystatechange = function(){
if (request.readyState == 4 && request.status == 200){
if(request.responseText != -1){
var tableBody = document.getElementById('award-body');
var sqlId = parseInt(JSON.parse(request.responseText));
var prevSelector = document.getElementById('level-select-'+self.length);
var prevLevel = 0;
if(prevSelector != null){
prevLevel = parseInt(prevSelector.value);
}
var minCardQuantity = prevLevel + 1;
var maxCardQuantity = minCardQuantity + 100;
var awardLevel = {
id: sqlId,
awardId: 0,
certificateId: 0,
awardLvl: self.length + 1,
cardQuantity: minCardQuantity
};
self.changeLevelSelect(self.length + 1, minCardQuantity);
var row = self.getRow(awardLevel, minCardQuantity, maxCardQuantity);
tableBody.appendChild(row);
self.awards[length] = awardLevel;
self.length++;
}
}
}
request.open('GET', '_insert_award_lvl.php?level=' + awardLevel, true);
request.send();
location.reload();
}
令我困惑的行为是奖励等级的处理
在宣布之前对其进行了修改,即使对悬挂的模糊理解我也认为不应该有效。此外,早期赋值运算符似乎将变量赋值给Int,而后者则将其赋值并用作关联数组。
整体代码有很多意外和混乱的行为,而且我对Javascript已经缺乏经验。
答案 0 :(得分:1)
外部awardLevel
变量未在“声明之前被修改”:它永远不会被声明。另一个声明仅对声明它的函数有效(并且它会遮蔽外部声明)。
这意味着:
awardLevel
有一个名为awardLvl
的属性并没有让它变得更好让所有这些稍微不那么混乱的一种方法是:
// awardLevel = this.length + 1; remove that line
request.onreadystatechange = function(){
// don't change which is here
}
request.open('GET', '_insert_award_lvl.php?level=' + (this.length + 1), true);