对变量的访问输出未定义

Access to a variable prints undefined?

本文关键字:输出 未定义 访问 变量      更新时间:2023-09-26

您好,我试图访问如下变量,

for(var k=0;k<resultSet.length;k++)
{
   alert(resultSet[k]);
   $.get('/api/TagsApi/ElementsTagsIntersect?ids='+resultSet[k], function (data) {
        testingarr = [];
        for (var i = 0; i < data.length; i++) {                    
            testingarr.push(data[i]["ID"]);
        }
        for (var w = 0; w <3; w++) {
             if (($.inArray(testingarr[w], selectedloc)) > -1) {
                    var str = "<input type='checkbox' name ='test[]' value='" + resultSet[k] + "'/>" + resultSet[k] + "</br>";
                    $('#childs').append(str);
                     alert(resultSet[k]);
                    break;
                }
        }
}, 'json');

其中第一个alert显示我所期望的确切值,但是当涉及到内部for循环时,alert返回undefined并添加一个未定义的复选框。我认为我正在使用正确的初始化,但困惑为什么这样做?

原因是k改变了值,所以当调用内部函数时,k已经等于resultSet.length。您可以将整个内容包装在另一个函数中,并将k作为参数传递,将其绑定到一个不会随原始k更改的新变量:

for(var k=0;k<resultSet.length;k++)
{
  (function (result) {
    $.get('/api/TagsApi/ElementsTagsIntersect?ids='+result, function (data) {
      var testingarr = [];
      for (var i = 0; i < data.length; i++) {                    
        testingarr.push(data[i]["ID"]);
      }
      for (var w = 0; w <3; w++) {
        if (($.inArray(testingarr[w], selectedloc)) > -1) {
          var str = "<input type='checkbox' name ='test[]' value='" + result + "'/>" + result + "</br>";
          $('#childs').append(str);
          break;
        }
      }
    }, 'json');
  })(resultSet[k]);
}