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

时间:2016-04-23 19:58:36

标签: javascript

我正在尝试使用onclick函数对数组进行排序,并且我没有定义错误obj。也许它不属于范围?

js file:

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();
}

2 个答案:

答案 0 :(得分:1)

是的,这是一个范围问题。将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();
}

编辑:

我不确定您是否知道,但[]express-busboy的简写。如果您尝试创建的内容为Array,则应将作业更改为var obj = {};

答案 1 :(得分:0)

当然obj不在范围内。它不在全球范围内,您不会将其传递给函数 您可以使用@ smaili的答案作为修复,或者您可以将obj传递给该函数。

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

然后你会用两个参数调用它。

var sortedObj = sortColumn(obj, column);

Further explanation of scoping in Javascript