下面代码输出结果是什么?why?
package main
import "fmt"
func main() {
a, b := 1, 1
if a == b {
a := -1
fmt.Println(a + b)
}
fmt.Println(a + b)
}
0, 2 变量作用域
不知道为啥被举报后,其他两个小伙伴评论没有了。
奇葩的举报理由“分享就正常的分享文章,不要把社区提问的模式作为分享的渠道”,分享的就是面试题啊,更奇葩的是还同意了举报
0
2
a := -1 只在 if 的作用域有效,所以有 if 中的 输出是 -1 + 1 = 0,在 if 之外的输出是 1 + 1 = 2
变量遮蔽
内层作用域可以声明与外层作用域同名的变量,内层变量会遮蔽(覆盖)外层变量的访问。
这不会影响外层变量的值,但在内层作用域中外层变量不可见。
短变量声明(:=):
在函数内部可以使用 := 进行短变量声明,它只能在函数级或更内层作用域中使用。
如果在同一个代码块内重复声明,会导致编译错误。