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

如何在JavaScript中对变量执行算术运算?新手遇NaN问题求助

问题分析与解决方案

嘿,我来帮你搞定这个NaN的问题!你遇到的坑其实是JavaScript里**变量提升(Hoisting)**的经典新手雷区。

先拆解问题根源:
在add()函数里,你写了var example = example + 10——这里用var重新声明了一个局部的example变量。因为var的特性,函数作用域里的这个变量会被「提前声明」但不会提前赋值,所以当你执行example + 10的时候,这个局部的example还是undefined,undefined + 10自然就得到NaN了!

另外还有个小细节要修正:你的HTML标签写错了,<P id="text"></text>应该改成<p id="text"></p>,闭合标签要和开头一致,不然可能影响DOM元素的正常获取。

下面给你两种贴合需求的解决方案:

方案1:修改全局变量(适配你的累加需求)

如果你想让点击按钮后全局的example值持续累加,直接去掉函数里的var声明就行,这样函数会直接引用全局作用域的example变量:

var example = 30;
function add() {
  example += 10; // 等价于 example = example + 10,写法更简洁
  document.getElementById("text").innerHTML = example;
}

修正后的HTML:

<p id="text"></p>
<button onclick="add()">点击累加</button>

方案2:基于全局值创建局部变量(如果需要区分全局与局部)

如果你想在函数里创建独立的局部变量,但值基于全局example,可以明确引用全局变量(浏览器环境下全局变量挂在window对象上):

var example = 30;
function add() {
  var localExample = window.example + 10;
  document.getElementById("text").innerHTML = localExample;
}

不过这种方案里全局的example值不会被修改,每次点击都会基于初始的30加10得到40,和你的累加需求可能不符,所以方案1更适合你。

最后给你个新手小贴士:现在开发里更推荐用let和const代替var,它们的块级作用域更清晰,能避免很多变量提升导致的奇怪问题。比如把全局变量改成let example = 30,后续维护起来会更省心~

内容的提问来源于stack exchange,提问作者Joshua Riefman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:34:47