如何在JavaScript中增加变量的范围?
我有以下代码:如何在JavaScript中增加变量的范围?,javascript,jquery,Javascript,Jquery,我有以下代码: $('.task-list').each(function(list, response) { response = $('#' + this.id).sortable('toArray'); }); console.log(response); 我得到的错误是响应未定义。我尝试将第2行调整为var response,但得到了相同的错误 我试图通过在页面上的项目上循环,然后向服务器提交一个ajax响应来更新它,从而构建一个数据数组。将变量移到函数之外(或者更确切地说,声
$('.task-list').each(function(list, response) {
response = $('#' + this.id).sortable('toArray');
});
console.log(response);
我得到的错误是响应未定义。我尝试将第2行调整为var response
,但得到了相同的错误
我试图通过在页面上的项目上循环,然后向服务器提交一个ajax响应来更新它,从而构建一个数据数组。将变量移到函数之外(或者更确切地说,声明):
var response;
$('.task-list').each(function(list, response) {
response = $('#' + this.id).sortable('toArray');
});
console.log(response);
第二个例子更接近我认为您想要的,但我不清楚您试图收集什么数据
var response = [];
$('.task-list').each(function() {
response.push($('#' + this.id). <<some data from this element??>>
});
console.log(response);
var响应=[];
$('.task list')。每个(函数(){
response.push($('#'+this.id)。
});
控制台日志(响应);
我不确定是否为每个委托提供了正确的参数,但这是如何将范围扩展到外部:
var response;
$('.task-list').each(function(list) {
response = $('#' + this.id).sortable('toArray');
});
console.log(response);
由于您在每个迭代过程中都覆盖了响应的值,所以不太清楚您想要完成什么。这可能更接近您想要的:
var response = [];
$('.task-list').each(function() {
response.push($(this).sortable('toArray'));
});
// response will now be an array, where each item is another array from each .task-list
console.log(response);
您可能希望:
请注意,response
是其每个
迭代器中的一个参数名称。这可能是我的代码中的一个错误-我在这里没有经验。此答案中建议的代码不起作用,尽管这次没有错误,响应在控制台日志行中应该包含某些内容时是空的。是的……但这不是他问了一个问题。这似乎是他试图做的事情的错误方式。@Jeremy-你的第二个例子基本上就是我发布的…(编辑:除了仍然坏掉之外,因为你留下了响应参数).@Jeremy-尽量避免煽动性,所以请将此作为一个完全技术性的批评:p。即使只解决问题的变量范围方面,您的回答仍然是错误的。从技术上讲,您所做的只是在每个迭代器的范围之外引入一个新变量,response
。他想要的变量但是,迭代器上的response
参数增加了作用域。保留该参数不变,您的示例包含两个不同的response
变量,其中response
参数的作用域与OP的原始示例中的作用域完全相同。.sortable('toArray')是什么
do?你能澄清一下你想要的结果是什么吗?有多少个.task list元素?$(this)
而不是$('#'+this.id)
请…这是正确的答案-你是正确的-有多个错误,响应不应该是参数。很酷。还可以看看@IAbstractDownvoteFactor的答案。它将在响应中为你提供与我相同的值,但有点干净(IMO)。
var response = $('.task-list').map(function() {
return $(this).sortable('toArray');
});
console.log(response)