jQuery.each外部声明的变量在jQuery.each体内变为未定义

时间:2018-01-22 14:13:02

标签: javascript jquery global-variables

我正在面对jQuery.each的一些iisue。我在jquery.each语句之外声明了一个变量。在第一次从jquery.each主体初始化变量之后,该变量不可用于下一次迭代。它说未定义。

以下是示例代码

var cname= '';

jQuery.each(candidate_arr['data'], function(index, data){
    if(index == 0){
        jQuery('.list').append('<li class="cname">'+ data['cname'] +'</li>');
        cname= data['cname'];
    }

    if(cname != data['cname']){ 
        // cname is undefined for index = 1, 2, 3....
        jQuery('.list').append('<li class="cname">'+ data['cname'] +'</li>');
        var cname = data['cname'];
    }


    jQuery('.list').append('<li>'+ data['candidate_name'] +'</li>');
})

2 个答案:

答案 0 :(得分:1)

回调函数中的范围不同,因此无法访问该变量

尝试正常的js循环

var cname= '';
var candidate_arr = {
  data: [{cname:"123"},{cname:"1234"},{cname:"1235"}]

};

for(var index=0; index< candidate_arr['data'].length;index++){
  var data = candidate_arr['data'][index];
  console.log(data);
  console.log(cname);
    if(index == 0){
        jQuery('.list').append('<li class="cname">'+ data['cname'] +'</li>');
        cname= data['cname'];
    }

    if(cname != data['cname']){ 
        // cname is undefined for index = 1, 2, 3....
        jQuery('.list').append('<li class="cname">'+ data['cname'] +'</li>');
        var cname = data['cname'];
    }


    jQuery('.list').append('<li>'+ data['candidate_name'] +'</li>');
}

答案 1 :(得分:0)

您已在每个块var cname内设置它是否告诉JavaScript引擎在每次迭代中创建一个新变量cname。它不使用块外的变量的全局变量实例。

您应该了解JavaScript中的变量范围:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var