JavaScript中如何修改变量仅作用于局部而不改动全局变量?
问题根因
你标注的i+1本身是纯计算表达式,只要没有搭配赋值操作(比如写i = i + 1),根本不会修改全局变量i。循环里真正修改全局i的是末尾的i--逻辑。如果你实际运行时发现全局i在else分支被异常改动,大概率是写代码时不小心给全局i做了赋值操作,不是i+1表达式本身的问题。
解决方案
要彻底隔离局部计算和全局变量,避免误操作,只需要在做局部数值计算时,把当前全局i的值拷贝到局部变量中,所有局部计算都基于局部变量操作即可,局部变量的改动完全不会影响全局作用域的变量。
修正后的代码:
var i = 100; function gamePlay() { while(i >= 0) { if (i > 0) { console.log(i); } else { // 声明块级局部变量,拷贝当前全局i的数值 const localI = i; // 局部计算仅操作局部变量,和全局i完全无关 console.log(localI + 1); } // 保留原有全局i的循环迭代逻辑 i--; } }
补充说明
- 用
let/const在函数内、判断/循环的块级作用域内声明的变量都是局部变量,和外层全局同名变量完全独立,互不影响 - 如果确定不会写赋值逻辑,else分支直接写
console.log(i + 1)本身也不会改动全局i,不需要额外声明变量也能满足需求,声明局部变量只是为了从写法上彻底避免后续误写赋值操作改到全局变量
内容的提问来源于stack exchange,提问作者Gadrri
相关产品推荐
相关产品推荐

