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

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

问题描述:

我想使用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(); 
} 
+0

通行证阵列。总是。 –

+1

'var obj = {}'而不是'[]' –

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

编辑:

我不知道,如果你是知道的,但[]是一个Array简写。如果您要创建的是Object,那么您应该将您的任务更改为var obj = {};

+0

工作正常!谢谢! – Jennifer

+0

你是对的,它是一个数组,而不是对象 – Jennifer

当然obj不在范围内。它不在全局范围内,而且你没有将它传递给函数。
您可以使用@ smaili的答案作为解决方法,或者您可以将obj传递给函数。

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

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

var sortedObj = sortColumn(obj, column); 

Further explanation of scoping in Javascript

+0

该函数的调用在aspx页面上,我不知道该变量是否存在 – Jennifer

+0

@Jennifer没问题。它仍然有助于真正理解范围设定,因为另一个功能可能会“损坏”在全局范围内声明的变量。 – Iro