You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript函数间变量传递及相乘出现NaN问题排查

问题原因及解决方案

核心问题

  1. 变量作用域冲突:全局声明的stawka1和kurs1从未被修改——你在stawka()和kurs()函数里用const重新声明了同名局部变量,函数执行结束后局部变量销毁,全局变量始终保持初始值0。
  2. 函数调用未传参:点击按钮调用mozlwygr()时未传递参数,函数内的stawka1和kurs1参数值为undefined,undefined * undefined直接返回NaN。
  3. 函数重复定义:mozlwygr被定义两次,后定义的函数会覆盖前一个,属于冗余代码。

修复后的代码

JavaScript 部分

let kurs1 = 0;
let stawka1 = 0;

function druzyny() {
  let druz = prompt("Podaj drużynę pierwszą.");
  let druz2 = prompt("Podaj drużynę drugą.");
  document.getElementById("druzyna1").innerHTML = "Drużyna pierwsza: " + druz;
  document.getElementById("druzyna2").innerHTML = "Drużyna druga: " + druz2;
}

function stawka() {
  // 移除const,直接修改全局变量
  stawka1 = parseInt(prompt("Podaj stawkę."));
  if (isNaN(stawka1)) {
    console.log("Błąd: Stawka to nie liczba.");
    return;
  }
  console.log("Stawka:", stawka1);
  document.getElementById("p1").innerHTML = "Stawka wynosi: " + stawka1 + "zł.";
}

function kurs() {
  // 移除const,直接修改全局变量
  kurs1 = parseInt(prompt("Podaj kurs."));
  if (isNaN(kurs1)) {
    console.log("Błąd: Kurs to nie liczba.");
    return;
  }
  console.log("Kurs:", kurs1);
  document.getElementById("kurs").innerHTML = "Kurs wynosi: " + kurs1 + "x";
}

// 保留带检查的函数,移除重复定义,直接使用全局变量
function mozlwygr() {
  if (isNaN(stawka1) || isNaN(kurs1)) {
    console.log("Błąd: Stawka lub kurs to nie liczba.");
    return;
  }
  let wygrana = stawka1 * kurs1;
  document.getElementById("mozliwawygrana1").innerHTML = "Możliwa wygrana: " + wygrana + "zł.";
}

HTML 部分(无需修改)

<button id="butt-wyjdz" type="button" class="btn btn-info" onclick="stawka()">Ustaw stawkę</button>
<button id="butt-kurs" type="button" class="btn btn-info" onclick="kurs()">Ustaw kurs</button>
<button id="butt-kurs" type="button" class="btn btn-success" onclick="mozlwygr()">Oblicz możliwą wygraną</button>
<button type="button" class="btn btn-secondary" id="liveAlertBtn" onclick="losuj(), mozlwygr()">Przewiduj</button>
<button id="butt-druz" type="button" class="btn btn-info" onclick="druzyny()">Drużyny</button>
<script src="gamb1.js"></script>
<script src="scriptsite.js"></script>

额外优化建议

  • 用parseFloat替代parseInt,支持小数金额和汇率。
  • 在prompt中补充输入提示,比如prompt("Podaj stawkę (liczba, np. 100):"),引导用户输入正确格式。
  • 将全局变量封装到对象中,避免全局作用域污染,比如const appData = { stawka1: 0, kurs1: 0 },函数内修改appData.stawka1。

内容的提问来源于stack exchange,提问作者Tomasz Ciszewski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 11:17:14