26. 作用域描述与声明
作用域为已声明标识符所表示的常量、类型、变量、函数或闭包在源代码中的作用范围。yaklang的作用域与golang几乎保持一致,例如:
// 全局变量var GLOBAL_VAR = 6666func scope_test(c) { // c: 形式参数 // 局部变量 var a, b a, b = 1, 2 assert a == 1 assert b == 2 assert c == 3 assert GLOBAL_VAR == 6666}
scope_test(3)assert a == nilassert b == nilassert c == nilassert GLOBAL_VAR == 6666
值得注意的是,新版yaklang引擎与旧版yaklang引擎在:=行为表现不一致。在旧版yaklang中,:=与=完全相同,而在新版yaklang中:=会强制创建一个新的局部变量,一个简单的例子如下:
var VAR = 1func scope_test() { assert VAR == 1 VAR := 2 // 定义了一个新的局部变量VAR,与全局变量同名,之后使用的都是该局部变量 assert VAR == 2 VAR = 3 // 修改局部变量,不会影响到全局变量}
scope_test()assert VAR == 1