你写了一段代码,里面有个变量叫 count,在函数里把它加了 1,可一跳出函数,发现 count 还是老样子——没变。不是代码写错了,是变量的作用域在起作用。
啥是作用域?
简单说,就是变量能被“看见”和使用的范围。就像你家客厅的遥控器,只在客厅能用;拿到隔壁房间,别人就找不到它了。变量也一样,它出生在哪,就在哪能被调用。
最常见的两种作用域
大多数编程语言(比如 Python、JavaScript)里,主要分两种:
局部作用域:变量定义在函数内部,那它只归这个函数管。函数一执行完,它就自动消失,外面压根不知道它存在过。
def add_one():
num = 10
num += 1
print("函数里:", num) # 输出:11
add_one()
print("函数外:", num) # 报错!NameError: name 'num' is not defined全局作用域:变量写在所有函数外面,整个文件里基本都能访问到。
score = 85
def show_score():
print("当前分数:", score) # 能正常打印 85
show_score()
print("外面也能看到:", score) # 同样能打印 85小心“同名不同命”
如果函数里又定义了一个和全局变量同名的变量,那函数里用的就是自己的那个,不会影响外面的。就像两家人各养了一只叫“旺财”的狗,你喊一声“旺财”,你家狗跑过来,邻居家的理都不理。
name = "小明"
def change_name():
name = "小红" # 这是新的局部变量
print("函数里:", name) # 小红
change_name()
print("函数外:", name) # 还是小明想在函数里改全局变量?得打招呼
真想改全局变量,Python 里得加 global 声明,JavaScript 里得确认它确实是全局声明(比如没用 let 或 const)。不然默认就当你在造一个新的局部变量。
money = 100
def spend():
global money
money -= 20
print("花了20,还剩:", money) # 80
spend()
print("外面看:", money) # 也是 80作用域不是限制,是保护。它让变量各司其职,避免东改西动、牵一发而动全身。写代码时多留心变量在哪定义的,自然就少踩坑。