编程语言的作用域
一个变量的作用域 (scope) 是程序中可以使用这个变量的区域
-
全局变量 拥有 全局作用域,在代码中任何地方都可以使用
-
局部变量 拥有 局部作用域,仅在特定范围内可以使用
函数级作用域
在函数内声明的变量只在函数体内部可以使用,是局部变量;同时,函数参数也是局部变量,他们只在函数体内有定义。
有时函数作用域会造成问题,以Python为例:
1 | print_is = [] |
这里我们本希望批量生成打印i
值的函数,但输出却是2 2 2
,这是因为所有的print_i
都使用了同一作用域的i
块级作用域
不是以函数、而是以块
({}
)为作用域的,以JS为例:
1 | print_is = []; |
由于每个print_i
都拥有不同作用域,所以可以打印出0 1 2
静态作用域(词法作用域)
在编译时决定作用域:
1 | var value = 1; |
结果为1
,foo()
寻找的是定义function
时的作用域
动态作用域
在运行时决定作用域,上述代码打印2
foo()
寻找的是执行 foo()
时位于 bar()
内的作用域