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