我从github上的一本You Don't Know JS books书中看到了这个程序:
const SPENDING_THRESHOLD = 200;
const TAX_RATE = 0.08;
const PHONE_PRICE = 99.99;
const ACCESSORY_PRICE = 9.99;
var bank_balance = 303.91;
var amount = 0;
function calculateTax(amount) {
return amount * TAX_RATE;
}
function formatAmount(amount) {
return "$" + amount.toFixed( 2 );
}
// keep buying phones while you still have money
while (amount < bank_balance) {
// buy a new phone!
amount = amount + PHONE_PRICE;
// can we afford the accessory?
if (amount < SPENDING_THRESHOLD) {
amount = amount + ACCESSORY_PRICE;
}
}
// don't forget to pay the government, too
amount = amount + calculateTax( amount );
console.log(
"Your purchase: " + formatAmount( amount )
);
// Your purchase: $334.76
// can you actually afford this purchase?
if (amount > bank_balance) {
console.log(
"You can't afford this purchase. :("
);
}
// You can't afford this purchase. :(
我的问题是,如果我将bank_balance
的值更改为更高的值,但它会保持打印无关紧要:You can't afford this purchase.
我已尝试制作它,因此无法打印:You can't afford this purchase.
我不能让它发挥作用。我开始认为该计划是错误的,但我认为只是我。
我知道解决方案很简单,但我看不到它,也找不到它。
答案 0 :(得分:2)
它来自您的while(amount < bank_balance)
。您增加amount
,直到它大于bank_balance
。很明显,之后它比bank_balance
大。
此外,您可以使用每个现代浏览器中提供的开发人员工具(适用于Chrome或Firefox的F12将打开它们),您可以在其中放置断点并遵循代码流程。
答案 1 :(得分:2)
我不知道该程序意味着要做什么,但它似乎对我没有多大意义。
只要您有钱,它就会“购买”手机,但不会检查您是否有足够的钱购买额外的手机。
因此,在while
循环结束时,您已将全部资金用于手机或(更有可能)花费更多的钱。
除此之外还有配饰和税收。所以最后,你将无法负担购买的费用。
无论你提高平衡程度有多高,程序都会超过它。
使用
行可以更好地使用该程序while (amount + PHONE_PRICE + calculateTax(amount + PHONE_PRICE) <= bank_balance)
甚至
while (amount + PHONE_PRICE + ACCESSORY_PRICE + calculateTax(amount + PHONE_PRICE + ACCESSORY_PRICE)<= bank_balance)
虽然我不得不承认我不确定SPENDING_THRESHOLD
的目的是什么。
答案 2 :(得分:1)
您不断添加新手机和配件,直至达到总金额。我估计总成本会非常接近金额,因此当您添加税额时,它会越过极限并且您会看到该消息。我建议你比较(在while循环中)手机价格和税收。类似的东西:
while (amount + PHONE_PRICE + calculateTax( PHONE_PRICE ) < bank_balance) {
// buy a new phone!
amount = amount + PHONE_PRICE + calculateTax( PHONE_PRICE );
// can we afford the accessory?
if (amount < SPENDING_THRESHOLD) {
amount = amount + ACCESSORY_PRICE;
}
}
参考https://jsfiddle.net/Lxwscbbq/ 打开浏览器控制台以查看消息。
答案 3 :(得分:0)
程序没错,很简单:
var bank_balance = 303.91;
是全球性的。假设你提供了
amount = 200;
amount = amount + calculateTax( amount );
amount = 200 + calculateTax(200);
如果您检查条件,您可以看到金额大于输入金额。这就是为什么你会得到&#34;你买不起&#34;
if (amount > bank_balance) {
console.log(
"You can't afford this purchase. :("
);
}