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

JavaScript函数未修改全局变量问题原因及修正方法

为什么你的JavaScript代码输出0而不是10?

嘿,这个问题其实是JavaScript变量作用域的典型坑!咱们一步步拆解:

问题根源

你看这段代码:

var num = 0; 
function change(){ 
  var num = 10; // 这里的num是函数内部的局部变量
} 
change(); 
document.write(num); // 这里访问的是全局的num

当你在change函数里用var num = 10声明变量时,你其实创建了一个仅在函数内部生效的局部变量,它和全局作用域里的num是完全独立的两个变量。函数执行结束后,这个局部num就被销毁了,全局的num自始至终都是0,所以最后输出0。

正确的写法有两种常见方案:

方案1:修改全局变量(不推荐,但符合你的预期)

如果就是想修改全局的num,去掉函数内部的var关键字,这样JavaScript会自动向上查找作用域,找到全局的num并修改它:

var num = 0; 
function change(){ 
  num = 10; // 直接赋值,不再声明新变量
} 
change(); 
document.write(num); // 现在输出10

方案2:通过返回值传递(更规范,避免全局变量污染)

更好的做法是让函数返回修改后的值,再赋值给全局变量(或者直接使用返回值),这样能减少全局变量的使用,代码更可控:

var num = 0; 
function change(){ 
  var num = 10; 
  return num; // 返回局部变量的值
} 
num = change(); // 将返回值赋值给全局num
document.write(num); // 输出10

如果是现代JavaScript(ES6+),更推荐用let/const来声明变量,它们的块级作用域能避免很多这类混淆,但核心逻辑还是一样的——要明确你操作的是哪个作用域里的变量。

内容的提问来源于stack exchange,提问作者Hasnain Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:42:25