在函数

时间:2016-05-21 23:38:15

标签: javascript jquery

好的,所以我有这种奇怪的行为,我无法解释。请看以下内容:

$("#completeData").on("click", function() {
  var toUpdate = {};
  var toUpdateCount = 0;
  var ratios = {};
  This.calculateGradePerSize();
  //1) Select all sizes that are equal to NA or are Equal to 0 (means its a new one)
  $.each(This.logements, function(key, l) {
    if (l.sizeMyId === "NA" || l.sizeMyId === 0) {
      toUpdate[l.rueNum] = l;
      toUpdateCount++;
    } else { //else init the ratios because it means they are actually present
      /**
         //My problem is this variable, 
         I want it to be equal to an empty object
         But for reasons I cannot seem to understand, 
         it takes in account the latter modification in the code 
         that happens to this variables
      */
      ratios[l.sizeMyId] = {};
    }
  });

  console.log(toUpdate);
  console.log(ratios);
  console.log(This.sizeRatio);

  //2) Calculate Ratios and build the ratios function of the toUpdate
  $.each(This.sizeRatio, function(sizeMyId, count) {
    if (sizeMyId !== "NA" && sizeMyId != 0) {
      console.log("COUNT SIZE: " + count + " COUNT LOGEMENT: " + This.countLogement + " toUpdateCount: " + toUpdateCount + " SizeMyId: " + sizeMyId);
      console.log("Calculation: " + count / This.countLogement * toUpdateCount);
      ratios[sizeMyId].count = Math.ceil(count / This.countLogement * toUpdateCount);
      console.log("Calculation WITH CEIL: " + Math.ceil(count / This.countLogement * toUpdateCount));
      ratios[sizeMyId].grade = This.sizeGrade[sizeMyId];
      ratios[sizeMyId].sizeMyId = sizeMyId;
    }
  });

  console.log(ratios);
});

正如多线注释中所解释的,我的问题是比率变量。我试着声明没有var前缀的变量,所以JS不知道它的存在但仍然,我希望它是空对象。事实上,问题的根源不仅仅是那个,我无法更新它。我对ratios var所做的每一个更改都没有注册,但是我想从头开始,如何确保在函数开头这个变量是空的。

1 个答案:

答案 0 :(得分:1)

我不知道这个问题是否真的值得。考虑删除它。我的错误是每个函数中的count变量以及比率定义都是相同的,因此没有注册。

对于在函数start处不是空的变量。它只是JS引擎的工作原理。如果有些东西不起作用,那么你的代码就有可能出现问题。

$.each(This.sizeRatio, function (sizeMyId, count) {
  if (sizeMyId !== "NA" && sizeMyId != 0) {
    console.log("COUNT SIZE: " + count + " COUNT LOGEMENT: " + This.countLogement + " toUpdateCount: " + toUpdateCount + " SizeMyId: " + sizeMyId);
    console.log("Calculation: " + count / This.countLogement * toUpdateCount);   
    //HERE ratios[sizeMyId].count IS THE SAME than the anonymous function.
    ratios[sizeMyId].count = Math.ceil(count / This.countLogement * toUpdateCount); 
    console.log("Calculation WITH CEIL: " + Math.ceil(count / This.countLogement * toUpdateCount));
    ratios[sizeMyId].grade = This.sizeGrade[sizeMyId];
    ratios[sizeMyId].sizeMyId = sizeMyId;
  }
});