变量未定义的问题

时间:2015-03-07 22:30:01

标签: jquery scope

我创建了一个循环遍历一组产品的函数,并将其复制区域的高度设置为该集合中最高复制区域的高度。

这是我的代码:

function productCopyHeight(){
    //make sub range product text sections the same height
    if($('.sub-range').length){
        $('.sub-range').each(function(){
            var itemHeight = 0;
            $(this).children('.product-item').children('.copy').each(function(i){
                var thisItemHeight = $(this).height();
                console.log(thisItemHeight + ' > ' + itemHeight)

                if(thisItemHeight > itemHeight){
                    var itemHeight = thisItemHeight;
                }

            });
            $(this).children('.product-item').children('.copy').css('height', itemHeight);
        })
    }

}

当我记录它时,它在每个循环之前定义时将itemHeight变量显示为undefined。

1 个答案:

答案 0 :(得分:1)

那是因为你在内部each的回调中用同一名称声明了另一个变量。这里:

if(thisItemHeight > itemHeight){
  var itemHeight = thisItemHeight;
}

该变量与循环前的变量不同,该变量也被提升到函数的顶部。该变量的值为undefined,因为您在为其赋值之前使用它。

您应该使用已有的变量而不是创建另一个变量:

if(thisItemHeight > itemHeight){
  itemHeight = thisItemHeight;
}