我的JavaScript基本上如下所示
function a() {
b(1);
}
function b(myNumber) {
c(myNumber);
}
function c(myNumber) {
var calculation = 5 * (myNumber - 1);
alert(calculation);
}
当我调用函数a()
时,警告框最终会显示“NaN”。为什么会这样?我尝试在很多地方使用parseInt()
功能,但似乎没有任何效果。
完整代码(实际上是做什么而不是剥离的示例):
function updateTablePagination(tableId, rowsPerPageSelectId) {
updateTablePagination(tableId, rowsPerPageSelectId, 1);
}
function updateTablePagination(tableId, rowsPerPageSelectId, pageNumber) {
var table = document.getElementById(tableId);
var rowsPerPageSelect = document.getElementById(rowsPerPageSelectId);
var rowsPerPage = rowsPerPageSelect.options[rowsPerPageSelect.selectedIndex].text;
updateTable(table, rowsPerPage, pageNumber);
//updateTablePageLinks();
}
function updateTable(table, rowsPerPage, pageNumber) {
var tableRows = table.getElementsByTagName("tr");
var totalNumberOfRows = tableRows.length;
var startRow = rowsPerPage * (pageNumber - 1);
var endRow = Math.min(startRow + rowsPerPage, totalNumberOfRows - 1);
alert("Start: " + startRow + "\nEnd: " + endRow);
}
选择框中有一个onchange
来电updateTablePagination('myTableId', 'rowsPerPage')
。 ids都是正确的。
“开始”和“结束”都是NaN。
或者,如果我只是alert(pageNumber)
,那么它是未定义的。
即使这样说pageNumber
未定义:
function updateTablePagination(tableId, rowsPerPageSelectId) {
updateTablePagination(tableId, rowsPerPageSelectId, 1);
}
function updateTablePagination(tableId, rowsPerPageSelectId, pageNumber) {
alert(pageNumber);
}
答案 0 :(得分:6)
您有两个名为updateTablePagination
的函数。 Javascript不支持函数重载。摆脱第一个声明,因为它被第二个声明覆盖。您可以使用||
为参数定义默认值。
function updateTablePagination(tableId, rowsPerPageSelectId, pageNumber) {
pageNumber = pageNumber || 1; //Set a default value for pageNumber
var table = document.getElementById(tableId);
var rowsPerPageSelect = document.getElementById(rowsPerPageSelectId);
var rowsPerPage = rowsPerPageSelect.options[rowsPerPageSelect.selectedIndex].text;
updateTable(table, rowsPerPage, pageNumber);
//updateTablePageLinks();
}
updateTablePagination(tableId, rowsPerPageSelectId) //Will call the function with pageNumber == 1
答案 1 :(得分:2)
问题是你要覆盖功能。有了这个:
function a() {
a(1)
}
function a(x) {
alert(x);
}
调用a
将始终调用第二个(覆盖)函数,因此x
始终未定义。你想要像重载一样的东西。在这种情况下,最好的办法是使用||
运算符作为默认值:
function a(x) {
var x = x || 1; // x if x is given, otherwise 1
alert(x);
}