将数组传递给函数或确保它在范围内

Pass array to function or make sure it is within scope?

本文关键字:确保 范围内 函数 数组      更新时间:2023-09-26

我正在尝试使用 onclick 函数对数组进行排序,但出现错误 obj 未定义。也许它不在范围内?

js 文件:

function pageLoad() {
    var url = API_URL + "/api/Ticket/GetTickets";
    var data = Ajax.getData(url);
    var obj = [];
    var tickets = JSON.parse(data.JsonResult);
    obj.Tickets = tickets;
    Tickets.Data = obj;
    var viewModel = {
        theObject: [obj.Tickets]
    };
    ko.applyBindings(viewModel);
}
function SortColumn(column) {
    obj.Tickets.column.sort();
}

是的,这是一个范围界定问题。 将obj声明移到函数之外,这样它对两个函数都可见。

像这样:

var obj = []; // <-- move here
function pageLoad() {
    var url = API_URL + "/api/Ticket/GetTickets";
    var data = Ajax.getData(url);
    var tickets = JSON.parse(data.JsonResult);
    obj.Tickets = tickets;
    Tickets.Data = obj;
    var viewModel = {
        theObject: [obj.Tickets]
    };
    ko.applyBindings(viewModel);
}
function SortColumn(column) {
    obj.Tickets.column.sort();
}

编辑:

我不确定您是否知道,但[]是数组的简写。如果您尝试创建的是对象,则应将分配更改为var obj = {};

当然obj不在范围内。它不在全局范围内,您不会将其传递到函数中.
您可以使用@smaili的答案作为修复,也可以obj传递给函数。

function sortColumn(obj, column) {
    obj.Tickets.column.sort();
    return obj;
}

然后,您将使用两个参数调用它。

var sortedObj = sortColumn(obj, column);

Javascript中作用域的进一步解释