【发布时间】:2014-08-22 03:59:59
【问题描述】:
我正在开发大量用于实习的软件,我的任务是向系统添加功能,该系统根据现有的奖品和卡片数量构建奖励级别表。
我正在进入添加行的函数,我发现一对非常奇怪的声明。我将发布函数本身,以免缺少上下文抑制答案。 我搜索了“cast”、“array”和“number”的各种组合,但似乎与这种做法无关。
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();
}
让我疑惑的行为是AwardLevel的待遇
它在声明之前就被修改了,即使对提升有一个模糊的理解,我也不认为应该工作。此外,早期赋值运算符似乎将变量分配给 Int,而稍后将其分配并用作关联数组。
整个代码有很多意想不到和令人困惑的行为,我对 Javascript 已经没有经验了。
【问题讨论】:
-
这是一个非常糟糕的代码,有两个不同的
awardLevel变量,一个是全局变量(它缺少var声明)。 -
内部闭包内的
awardLevel遮蔽了外部声明,外部声明要么在周围的构造函数代码中声明,要么隐式全局声明。 -
JavaScript 本身没有关联数组;在其他语言中类似于关联数组的是 JS 中的对象。
-
我明白了,它被视为关联数组,所以我问了这样的问题,试图获得正确的帮助。虽然它在技术上是一个搜索 Javascript Associative Arrays 的对象,但我发现了很多语法帮助。
标签: javascript arrays types