如何在if语句中修改全局变量?我的ON/OFF切换函数无法正常工作求助
如何在if语句里修改全局变量,实现ON/OFF切换逻辑?
嗨,我来帮你搞定这个问题!首先先给你理清楚全局变量在函数里修改的关键,再看看你的代码为啥可能没正常运行。
一、全局变量在函数内修改的正确姿势
如果变量是在函数外面声明的全局变量(就像你写的var on = 1;),在函数内部直接用这个变量名修改就行,千万别加var、let或者const!要是加了这些关键字,就等于在函数内部重新声明了一个局部变量,和外面的全局变量就没关系了,这是最容易踩的坑。
二、你的代码为啥没生效?
其实你的代码逻辑本身是对的,连续调用两次name()应该先弹ON再弹OFF。如果没正常运行,大概率是这几个原因:
- 函数名踩坑了:
name这个名字比较特殊,浏览器里的window对象本身就有个name属性,你用它当函数名可能会有冲突,换个名字比如toggleSwitch试试就好。 - 全局变量被覆盖了:如果你的代码前后还有其他地方也用了
on这个变量,不小心修改了它的值,就会打乱这个切换逻辑。 - 运行环境的小问题:比如某些严格模式下的限制,但你的代码本身不会触发这类问题。
三、调整后的可用代码
我把函数名改了,还优化了判断逻辑,你试试这个:
// 用let代替var,作用域更清晰 let on = 1; function toggleSwitch() { // 用严格相等===,避免类型转换的意外 if (on === 1) { alert('ON'); on = 0; } else { // 因为on只有0和1两种状态,else就够啦 alert('OFF'); on = 1; } } toggleSwitch(); // 第一次调用弹ON toggleSwitch(); // 第二次调用弹OFF
小补充
如果以后要做更复杂的状态切换,还可以用布尔值来代替0和1,可读性会更好:
let isOn = true; function toggleSwitch() { if (isOn) { alert('ON'); isOn = false; } else { alert('OFF'); isOn = true; } }
内容的提问来源于stack exchange,提问作者Andres Gaibor
相关产品推荐
相关产品推荐

