如何修复JavaScript等额本金还款计算器代码中的循环运行报错问题
错误点梳理
- 语法错误1:JavaScript没有内置
range()方法,这是Python独有的语法,直接调用会抛出未定义错误,不需要额外生成数组,循环直接用credit_term作为上限即可。 - 语法错误2:属性拼写错误,
arr_range.lenght正确写法为length,拼写错误会导致循环条件永远不成立,代码无法执行。 - 语法错误3:代码中直接使用
out变量,但没有提前通过DOM方法获取对应的页面元素,会抛出未定义错误。 - 语法错误4:除
loan_payment_amount外的所有变量都没有加let/const声明,会被隐式注册为全局变量,严格模式下会直接报错。 - 逻辑错误:
out.innerHTML = xxx是覆盖赋值,每次循环都会清空之前的还款额记录,最终只会显示最后一期的还款额,需要改成+=实现内容追加。
修正后完整代码
function result_differ() { // 请将括号内的id替换为你页面上实际用于展示结果的元素id const out = document.getElementById('result_area'); let amount_of_credit = parseFloat(document.getElementById('amount_of_credit').value); let credit_term = parseInt(document.getElementById('credit_term').value); let interest_rate = parseFloat(document.getElementById('interest_rate').value); let initial_fee = parseFloat(document.getElementById('initial_fee').value); // 每次计算前清空历史输出 out.innerHTML = ''; if (initial_fee === 0) { const part_of_the_principal = amount_of_credit / credit_term; const loan_payment_amount = []; for (let mes = 1; mes <= credit_term; mes++) { const interest_amount = amount_of_credit * (interest_rate / 100) * 30 / 365; const payment_amount_per_month = part_of_the_principal + interest_amount; loan_payment_amount.push(payment_amount_per_month); out.innerHTML += payment_amount_per_month.toFixed(2) + "<br />"; amount_of_credit -= part_of_the_principal; } document.getElementById('success_text_div').style.display = 'block'; } else { let loan_amount_minus_installment = amount_of_credit - initial_fee; const part_principal_minus_installment = loan_amount_minus_installment / credit_term; const loan_payment_amount = []; for (let mes = 1; mes <= credit_term; mes++) { const interest_amount = loan_amount_minus_installment * (interest_rate / 100) * 30 / 365; const payment_amount_per_month = part_principal_minus_installment + interest_amount; loan_payment_amount.push(payment_amount_per_month); out.innerHTML += payment_amount_per_month.toFixed(2) + "<br />"; loan_amount_minus_installment -= part_principal_minus_installment; } document.getElementById('success_text_div').style.display = 'block'; } }
内容的提问来源于stack exchange,提问作者avldokuchaev
相关产品推荐
相关产品推荐

