Javascript 我的代码没有';在未来的运营中保持价值

Javascript 我的代码没有';在未来的运营中保持价值,javascript,Javascript,这是一个简单的家庭银行,由javascript制作。如果我执行第一个操作,它工作得很好,但是如果我执行另一个操作,它不会保持前一个操作的值 我试图修改账户中的加(sumaDinero)和减(restDinero)的函数,但我认为它们没有问题。我看不出问题出在哪里 let saldoCuenta = 3000; const sumaDinero = (dinero) => { let nuevoSaldo = saldoCuenta + dinero; return nu

这是一个简单的家庭银行,由javascript制作。如果我执行第一个操作,它工作得很好,但是如果我执行另一个操作,它不会保持前一个操作的值

我试图修改账户中的加(sumaDinero)和减(restDinero)的函数,但我认为它们没有问题。我看不出问题出在哪里


let saldoCuenta = 3000;

const sumaDinero = (dinero) => {
    let nuevoSaldo = saldoCuenta + dinero;
    return nuevoSaldo;
}

const restDinero = (dinero) => {
   let  nuevoSaldo = saldoCuenta - dinero;
    return  nuevoSaldo;
}

const extraerDinero = (dinero) => {
    let ingreso = prompt("Ingrese la cantidad de dinero que desea extraer");
    dinero = parseInt(ingreso);
    let valorFinal = restDinero(dinero);

    if ((dinero % 100 == 0) && (dinero <= saldoCuenta)) {
        alert(`Su saldo anterior es de: $ ${saldoCuenta}  \nEl monto de su extracción es de: $ ${ingreso}
         \nSu saldo actual es de: $ ${valorFinal}`);
        nuevoValorEnCuenta = document.getElementById("saldo-cuenta").innerHTML = `$ ${valorFinal}`;
    } else if ((dinero <= saldoCuenta) && (dinero % 100 !== 0)) {
        alert(`Sólo puedes extraer billetes de $100`);
    } else if ((isNaN(ingreso) === true) || (ingreso == '0')) {
        alert(`El monto ingresado no es válido`);
    } else {
        alert(`No posee dinero suficiente para hacer esa extracción`);

    }
}

让输卵管分泌物=3000;
康斯特苏马迪内罗=(迪内罗)=>{
让nuevoSaldo=saldoCuenta+dinero;
返回新萨尔多;
}
const restDinero=(dinero)=>{
让nuevoSaldo=Saldocunta-dinero;
返回新萨尔多;
}
常量exterardinero=(dinero)=>{
让Ingreo=提示(“Ingrese la cantidad de dinero que desa exter”);
dinero=parseInt(入口);
让valorFinal=restDinero(dinero);
如果((迪内罗%100==0)和&(迪内罗
您正在将新余额分配给此处的新变量。您需要更新全局帐户余额:

saldoCuenta = restDinero(dinero);
您正在将新余额分配给此处的新变量。您需要更新全局帐户余额:

saldoCuenta = restDinero(dinero);

你读的是《莎尔多孔塔》
,但你从来不给它写信


我认为您的代码可以在一些地方得到改进

1) 在对值执行任何操作之前,您应该先检查它们。您的
if..else
逻辑可能会在某个时候失败,而应该将检查移到前端,并在出现错误时提前结束执行

 // Do checks first:
  if(!isRightFormat) return;
  if(!isEnoughMoney) return;

  doRealAction();
2) 你的函数,例如,
restDinero
是错误的抽象。
restDinero
函数是无用的,因为它没有提供真正的功能。另一方面,
exterardinero
做得太多,它混合了验证、操作和用户交互。相反,我要写(1)用于验证和修改数据的实用程序(如果需要,会抛出错误)和(2)用于用户交互的函数

3) 我将封装
saldoCuenta
,因为您希望确保不会以错误的方式更改此值,全局变量通常是不好的

我是这样写的:

  // The utilities for modification & validation
  const moneyStore = ((() => { // encapsulation through an IIFE
    let value = 3000; // This variable can only be accessed from the functions *here*, so the validations cannot be bypassed

    return {
      get value() { return value; }, // provide read-only access from the outside

      increase(amount) {
        if(!Number.isFinite(amount) || amount < 0) 
           throw new Error("Cannot add non-number to money");

       return value += amount; // return the updated value
      },

      decrease(amount) {
        if(!Number.isFinite(amount) || amount < 0) 
           throw new Error("Cannot add non-number to money");

        if(amount > value)
          throw new Error("Not enough money available");

        return value -= amount;
      },
   };
})();

function decreaseAmount() {
  const decreaseBy = parseInt(prompt("How much money do you wanna take?"), 10);
  if(decreaseBy % 100 !== 0) {
    alert("The value must be a multiple of 100");
    return;
  }

  try {
    moneyStore.decrease(decreaseBy);
    alert(`Returned ${decreaseBy}, current amount is ${moneyStore.value}`);
  } catch(error) {
    alert(`Could not return money because ${error.message}`);
  }
}
//用于修改和验证的实用程序
const moneyStore=(()=>{//通过IIFE进行封装
let value=3000;//此变量只能从函数*此处*访问,因此无法绕过验证
返回{
get value(){return value;},//从外部提供只读访问
增加(金额){
如果(!Number.isFinite(amount)| amount<0)
抛出新错误(“无法向货币添加非数字”);
返回值+=金额;//返回更新后的值
},
减少(数额){
如果(!Number.isFinite(amount)| amount<0)
抛出新错误(“无法向货币添加非数字”);
如果(金额>值)
抛出新错误(“可用资金不足”);
返回值-=金额;
},
};
})();
函数递减量(){
const decreaseBy=parseInt(提示(“您想拿多少钱?”),10);
如果(减少%100!==0){
警报(“该值必须是100的倍数”);
返回;
}
试一试{
moneyStore.减少(减少);
警报(`Returned${decreaseBy},当前金额为${moneyStore.value}`);
}捕获(错误){
警报(`由于${error.message}`,`无法返回金钱');
}
}

你读的是《莎尔多孔塔》,但你从来不给它写信


我认为您的代码可以在一些地方得到改进

1) 在对值执行任何操作之前,您应该先检查它们。您的
if..else
逻辑可能会在某个时候失败,而应该将检查移到前端,并在出现错误时提前结束执行

 // Do checks first:
  if(!isRightFormat) return;
  if(!isEnoughMoney) return;

  doRealAction();
2) 你的函数,例如,
restDinero
是错误的抽象。
restDinero
函数是无用的,因为它没有提供真正的功能。另一方面,
exterardinero
做得太多,它混合了验证、操作和用户交互。相反,我要写(1)用于验证和修改数据的实用程序(如果需要,会抛出错误)和(2)用于用户交互的函数

3) 我将封装
saldoCuenta
,因为您希望确保不会以错误的方式更改此值,全局变量通常是不好的

我是这样写的:

  // The utilities for modification & validation
  const moneyStore = ((() => { // encapsulation through an IIFE
    let value = 3000; // This variable can only be accessed from the functions *here*, so the validations cannot be bypassed

    return {
      get value() { return value; }, // provide read-only access from the outside

      increase(amount) {
        if(!Number.isFinite(amount) || amount < 0) 
           throw new Error("Cannot add non-number to money");

       return value += amount; // return the updated value
      },

      decrease(amount) {
        if(!Number.isFinite(amount) || amount < 0) 
           throw new Error("Cannot add non-number to money");

        if(amount > value)
          throw new Error("Not enough money available");

        return value -= amount;
      },
   };
})();

function decreaseAmount() {
  const decreaseBy = parseInt(prompt("How much money do you wanna take?"), 10);
  if(decreaseBy % 100 !== 0) {
    alert("The value must be a multiple of 100");
    return;
  }

  try {
    moneyStore.decrease(decreaseBy);
    alert(`Returned ${decreaseBy}, current amount is ${moneyStore.value}`);
  } catch(error) {
    alert(`Could not return money because ${error.message}`);
  }
}
//用于修改和验证的实用程序
const moneyStore=(()=>{//通过IIFE进行封装
let value=3000;//此变量只能从函数*此处*访问,因此无法绕过验证
返回{
get value(){return value;},//从外部提供只读访问
增加(金额){
如果(!Number.isFinite(amount)| amount<0)
抛出新错误(“无法向货币添加非数字”);
返回值+=金额;//返回更新后的值
},
减少(数额){
如果(!Number.isFinite(amount)| amount<0)
抛出新错误(“无法向货币添加非数字”);
如果(金额>值)
抛出新错误(“可用资金不足”);
返回值-=金额;
},
};
})();
函数递减量(){
const decreaseBy=parseInt(提示(“您想拿多少钱?”),10);
如果(减少%100!==0){
警报(“该值必须是100的倍数”);
返回;
}
试一试{
moneyStore.减少(减少);
警报(`Returned${decreaseBy},当前金额为${moneyStore.value}`);
}捕获(错误){
警报(`由于${error.message}`,`无法返回金钱');
}
}

请提供一个。特别是,说明如何使用这些函数。提示:您需要使用正确的值更新
saldoCuenta
。var saldoCuenta,它是一个给定任何值的变量,在本例中为3000。这是帐户中的初始金额。然后还有一些函数可以添加和从帐户中提取资金(在这个例子中,最初的3000美元。例如,当我想提取时,400美元效果很好,而r