在编写一些JS的过程中,脚本完全像我预期的那样工作,但在我给它提供数字之前。
现在数字IS在脚本中进一步说明了,我只是很好奇,这就是为什么这个有效? JS中的变量是否考虑了稍后在函数内声明的变量?
特定部分我很困惑:if (lastrowIDnumInt === 0)
因为var没有声明并且在else之前给出了值。
请问是否有人可以解释这是否正确,如果是,请参考为什么?
下面是片段:
function voidall() {
if (lastrowIDnumInt === 0){ // references lastrowIDnumInt, no tengo como haces without prior reference
alert("You cannot remove any items that do not exist!");
} else {
var activetableID = $("li.till_table_button.active").attr('id');
// alert(activetableID);
var tablenumber = $("#"+activetableID).data("tableref");
// alert(tablenumber); //testing
var lastrowid = $( "#till__tablepanel_table_"+tablenumber+" tr:last").attr("id");
var idReference = lastrowid.substr(0, lastrowid.indexOf('row_')); //gets the beggining id refernces without number
// alert(idReference); //testing
var fullReference = idReference+"row_";
// alert(fullReference); //testing
var lastrowIDnum = lastrowid.substring(lastrowid.indexOf("row_") + 4); //take number for row by removing string contents
lastrowIDnumInt = parseInt(lastrowIDnum); //turn string number into integer
while ( lastrowIDnumInt > 0 ) {
$( "#till__tablepanel_table_"+tablenumber+" tr:last").remove();
lastrowIDnumInt--;
}
}
}
答案 0 :(得分:4)
函数中的所有var
声明都被视为出现在函数顶部。它被称为“吊装”。
请注意,它是声明,它被视为顶部,而不是初始化。这意味着:
function foo() {
if (something === 0) {
alert("zero");
}
else {
var something = 0;
alert("not zero"); // <-- this
}
}
这被视为看起来像这样:
function foo() {
var something;
if (something === 0) { // <-- undefined here
alert("zero");
}
else {
something = 0;
alert("not zero"); // <-- this
}
}
答案 1 :(得分:3)
因为var
被提升到功能范围的顶部。换句话说,无论条件如何,您的变量都是定义的,但它们只会在else
块中分配值。