translation/chinese/03-包和作用域/问题/03-scopes/README.md
package awesome
import "fmt"
var enabled bool
func block() {
var counter int
fmt.Println(counter)
}
3: 是的,
enabled在任何函数之外,所以它是包作用域的变量block()也是包作用域,它也在任何函数之外
2: 没错,导入的包名称属于文件作用域,而且它们只能在同一文件中使用。
5: 是的,
counter在block()函数内部定义,所以它属于函数作用域,对block()函数外的其他代码不可见
block() 函数可以看见 enabled 变量吗?1: 包作用域的变量对同一个包下所有代码都可见
awesome中的其他文件可以看见 counter 变量吗?4: 没错。其他代码都无法看到
block()函数内部的变量。只有在block()函数内部的代码才能看到它们 (近在一定程度上 ,例如:函数内部的代码只能看到在它们之前声明的变量)
awesome 中的其他文件可以看见 fmt 变量吗?3: 只有在 import 只定义在同一个文件内,不管是不是同一个包,其他文件都不可见
package awesome
import "fmt"
// 在包作用域中声明两次
var enabled bool
var enabled bool
func block() {
var counter int
fmt.Println(counter)
}
2: 没错,不能在同一个作用域内声明同一个变量,如果这样做,使用变量时获取的是前一个还是后一个声明的变量?
package awesome
import "fmt"
// 在包作用域中声明
var enabled bool
func block() {
// 在函数作用域中声明
var enabled bool
var counter int
fmt.Println(counter)
}
1: 实际上,可以在内部作用域中声明相同的变量,例如
block()'的作用域在包作用域里面。这意味这它可以获取到包作用域的变量(反之则不同). 所以,block()'作用域在包作用域之内。这意味着你可以再次声明相同的变量。它会覆盖掉父作用域的变量,它们同时存在,请查看课程存储库中的示例以找出答案。