当前位置: 移动技术网 > IT编程>开发语言>.net > 代码块的作用域问题

代码块的作用域问题

2020年09月01日  | 移动技术网IT编程  | 我要评论
package mainimport "fmt"func main() {{v := 1{v = 2fmt.Println(v) // 2}fmt.Println(v) // 2}//fmt.Println(v) // undefined: v//作用域与标识符的定义紧密相关(更准确的说是与标识符被声明的地方)a := 10{a := 3fmt.Println(a) // 3}fmt.Prin
package main

import "fmt"

func main() {
	{
		v := 1
		{
			v = 2
			fmt.Println(v)   // 2
		}
		fmt.Println(v)     // 2
	}
	//fmt.Println(v)   // undefined: v


	//作用域与标识符的定义紧密相关(更准确的说是与标识符被声明的地方)
	a := 10
	{
		a := 3
		fmt.Println(a)   // 3
	}
	fmt.Println(a)    // 10



	// 变量标识符的作用域能到达最内层的代码块(不论是隐含的或者是显式用大括号包围起来的):
	{
		b := 4
		{
			fmt.Println(b)
			{
				//b = 5   // 输出为: 4 5 5
				b := 5    // 输出为: 4 5 4
				fmt.Println(b)
			}
		}
		fmt.Println(b)
	}


	// 遮蔽(Shadowing)
	// 在同一个代码块中,一个标识符不能被声明两次。
	// 但是在内部的代码块中可以重新声明外部被声明了的标识符 (代码块可以像洋葱那样一层层嵌套的)。
	// 如果在内层重新声明了标识符,那么在代码中起作用的声明是离代码最近的最里层的那个声明:
	d := "outer"
	fmt.Println(d)
	{
		d := "inner"
		fmt.Println(d)
		{
			fmt.Println(d)
		}
	}
	{
		fmt.Println(d)
	}
	fmt.Println(d)
	// 输出:
	//outer
	//inner
	//inner
	//outer
	//outer
}

本文地址:https://blog.csdn.net/ayqy42602/article/details/108582481

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网