如何在嵌套的each()函数外部访问变量?

时间:2014-01-27 10:21:35

标签: jquery each

我希望能够在函数外部访问嵌套 each()函数的值。

我的方法是:

  • 定义了函数外部的变量
  • 在函数中更新它,
  • 能够访问函数外部的更新值。

但这不起作用:

的jsfiddle

http://jsfiddle.net/rwone/ESXB4/

的jQuery

var my_array = [{"check": "tom", "nested_array": [{"nested_array_2": ["1", "2"], "name": "tom", "image": "one.jpg"}, {"nested_array_2": ["1", "2"], "name": "bob", "image": "two.jpg"}]}];

var check = my_array[0].check;

var desired_value = "hello";

$.each(my_array, function (obj, v) {
    $.each(v.nested_array, function (i, value) {
        if (value.name == check) {
            var desired_value = value.image;
            alert(desired_value);  // this returns `one.jpg`, the variable has been updated.  
        }
    });
});

//alert(desired_value); // this alerts 'hello',  the variable has not been updated.  

如果以上是错误的方法,是否有人可以演示如何访问嵌套each()循环的返回值?

编辑:我应该说,我在任何阶段使用全局变量都很谨慎,因为这可能会在以后的应用程序中引起问题。

编辑2:我认为在函数中使用全局变量将永远并且始终定义变量(除非它再次全局定义),但它似乎不是例如:

var desired_value = "hello";

$.each(my_array, function (obj, v) {
$.each(v.nested_array, function (i, value) {
if (value.name == check) {
desired_value = value.image; // 'global'
alert(desired_value);  // this returns `one.jpg`, the variable has been updated.  
}
});
});

alert(desired_value); // this alerts 'one.jpg',  the variable has been updated.  

var desired_value = "new value";

alert(desired_value); // this alerts 'new value'

更新了jsFiddle

http://jsfiddle.net/rwone/ESXB4/2/

2 个答案:

答案 0 :(得分:1)

您正在使用desired_value从外部作用域隐藏var desired_value = value.image;。这将在循环函数中创建名为desired_value的局部变量。您应该在此处删除var

答案 1 :(得分:1)

更新了FIDDLE

        var my_array = [{"check": "tom", "nested_array": [{"nested_array_2": ["1", "2"], "name": "tom", "image": "one.jpg"}, {"nested_array_2": ["1", "2"], "name": "bob", "image": "two.jpg"}]}];

var check = my_array[0].check;

var desired_value = "hello";

$.each(my_array, function (obj, v) {
$.each(v.nested_array, function (i, value) {
if (value.name == check) {
desired_value = value.image;  // here changes was made
alert(desired_value);  
}
});
});

alert(desired_value);