Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:如何动态更新我的闭包?_Javascript_Jquery - Fatal编程技术网

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

Javascript:如何动态更新我的闭包?,javascript,jquery,Javascript,Jquery,我对JS很陌生,所以,如果这是一个愚蠢的问题,我道歉: 目标:每次用户从下拉菜单中选择一辆车时,该车的价格都会增加一个运行总数 我这里有一些代码: 因此,我抓取所选的产品。然后关闭将产品价格添加到零开始 我选择另一辆车。第二辆车的价格必须加在第一辆车的价格上,从而增加总价格。它是显示在网页上的总数 听起来应该很容易。小提琴中的代码不起作用。我不知道如何让代码增加闭包的“内部”值。很明显,在每次选择之间必须坚持的是内在因素。我认为这种情况最好使用IFFE var carTotal = (funct

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

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

我这里有一些代码:

因此,我抓取所选的产品。然后关闭将产品价格添加到零开始

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


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

我认为这种情况最好使用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));
});

在闭包中需要一个变量来保存运行总数

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);
});

你有一个打字错误,是生活*:)对于未来的访客来说,什么是生活?@joaqínO谢谢你-仍在学习:什么是IFFE?哦,答案不是我的。。我只是指出了错误。总之,IIFE(立即调用的函数Expresion)是一个声明并立即调用的函数。生成闭包并避免在全局范围内留下指纹是很有用的,在您的情况下,它为您提供了一个存储总价值的范围。你可以多读一点关于生活的书这里有你想要闭包的理由吗?例如,为什么不在更改事件中增加
内部
变量?为什么在add函数中使用parseInt()?内部值已经是一个数字,您下拉列表中的价格有小数位,因此parseFloat()对它们更有意义(尽管在实践中,您显示的值的小数位/美分只是零)。@PatrickEvans-我将尝试一下。我曾经相信,为了保持一个价值,它必须在一个闭包中。还在学习JS。谢谢
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);
});