Javascript:如何动态更新我的闭包

Javascript: How to Dynamically Update My Closure?

本文关键字:更新 我的 闭包 动态 何动态 Javascript      更新时间:2023-09-26

我对JS很陌生,所以,如果这是一个愚蠢的问题,请道歉:

目标:每次用户从下拉菜单中选择汽车时,汽车的价格都会增加一个运行总计。

我这里有一个JSFiddle的代码:更新闭包

  <select id="select">
  <option value="">Select</option>
  <option value="100.00">Volvo</option>
  <option value="200.00">Saab</option>
  <option value="300.00">Mercedes</option>
  <option value="400.00">Audi</option>
</select>
<p>total:</p>
<p id="total"> </p>

Javascript:

var addTo = function(passed) {
  var add = function(inner) {
    return parseInt(passed) + parseInt(inner);
  }
  return add
};
var inner = 0; // Need to Dynamically be able to Update this value so that it increments with each new car selected
var addProd = new addTo(inner);
$("#select").change(function() {
  var car = $("#select").val();
  $("#total").append(addProd(car));
});

所以,我抓住了选定的产品。然后,闭包将产品价格添加到零以开始。

我选择另一辆车。第二辆车的价格必须加到第一个价格上,从而增加总数。这是网页上显示的总数。

听起来应该很容易。小提琴中的代码不起作用。我不知道如何让代码增加闭包的"内部"值。显然,在每次选择之间必须保留的是内部。

闭包中需要一个变量来保存运行总计。

var addTo = function(passed) {
  var total = parseInt(passed);
  var add = function(inner) {
    total += parseInt(inner);
    return total;
  }
  return add;
};

我认为这就是你要找的。

var runningTotal = 0;
$("#select").on('change', function() {
  var car = parseInt($(this).val());
  runningTotal += car;
  $("#total").html(runningTotal);
});

我认为这种情况最好使用 IFFE

var carTotal = (function() {
  var total = 0;
  return {
    addToTotal: function(val) {
      total += val;
      return total;
    }
  };
})();
$("#select").change(function() {
  var car = $("#select").val();
  $("#total").append(carTotal.addToTotal(car));
});