Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中增加变量的范围?_Javascript_Jquery - Fatal编程技术网

如何在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)