变量作用域|学习笔记

简介: 快速学习变量作用域

开发者学堂课程【Go语言核心编程 - 基础语法、数组、切片、Map:量作用域】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/625/detail/9611


变量作用域

内容介绍:

一、局部变量

二、全局变量

三、代码块定义变量

一、局部变量

函数内部声明/定义的变量叫局部变量,作用域仅限于函数内部。这个变量无论是首字母大写还是小写,只要在函数内部定义的就是局部变量。

1、案例代码:

package main

import (

"fmt"

)

//函数

func test() {

//age和Name的作用域就只在test函数内部

age := 10

Name := "tom~"

}

func main() {

}

2、代码解析:

打开 vs code,新建一个文件夹 varscope,新建一个文件 main.go,写一个主函数,func test 函数定义了两个变量,一个age赋值为10,另一个Name:=“tom”,这个age和Name的作用域仅限于test这个函数,如果出了这个函数 age 和 Name 就用不了了,age 和 Name 的作用域就只在 test 函数内部,如果在 func main 中用,直接会报错。


二、全局变量

函数外部声明定义的变量叫全局变量,作用域在整个包都有效,如果其首字母为大写,则作域在整个程序有效。

1、案例代码:

package main

import (

"fmt"

)

//函数外部声明/定义的变量叫全局变量,

//作用域在整个包都有效,如果其首字母为大写,则作用域在整个程序有效

var age int = 50

var Name string = “jack~"

//函数

func test() {

//age和Name的作用域就只在 test 函数内部

age := 10

Name := "tom~”

fmt.Println("age=", age)/ / 10

fmt.Println(Name=", Name)//  tom~

}

func main(){

fmt.Println("age=", age)// 50

fmt.Println( "Name=", Name) //jack

test()

}

2、代码解析:

var age int = 50和var Name string = “jack~"这两个变量与 age、Name 是两个不同的变量,前面的是全局变量,而后面的是局部变量。如果在前面定义的变量,首字母是小写的,那么这个age在整个包都可以使用,如果首字母是大写的,这个Name 不仅可以在本个包可以使用,在别的包也可以使用。再用fmt.Println("age=", age)输出就不报错了。如果在运行 main 的时候,输出的是50,因为作用域不一样。结果输出一个50和 jack~,跟分析的完全一样。如果继续调用了 test 函数,那么输出的结果就是:

age=50

Name=jack~

age=10

Name=tom~

注意:代码中age全局变量在别的包是用不了的,而 Name 全局变量在别的包可以使用,如果age改成大写,在其它包也可以运行。只有首字母大写的全局变量在本包可以使用,在其它包也可以使用。类似于 public。


三、代码块定义变量

如果变量是在一个代码块,比如 for /if中,那么这个变量的的作用域就在该代码块。

1、案例代码

package main

import (

"fmt"

)

func main()  {

fmt.Println( "age=", age) //5o0

fmt.Println( "Name=", Name) //jack~

test()

//如果变量是在一个代码块,比如 for/ if中,那么这个变量的的作用域就在该代码块

for i := e; i <= 10; i++ {

fmt.Println( "i=",i)

}

var i int 

//局部变量

for i = 0; i = 10; i++ {

fmt.Println( "i=",i)

}

fmt.Print1n( "i=",i)

}

2、代码解析:

(1)如果变量是在一个代码块,比如 for/ if中,那么这个变量的的作用域就在该代码块,写一个 for 循环定义一个i,for i = 0; i = 10; i++ ,这个代码输出0-10,在前面相当于定义了一个i,在下面用不了,如果想输出当i退出 for 循环时i等于多少是用不了的,错误原因是i没有定义,因为 for 是在这个代码块里面定义的,出了 for 循环就没用了,如果在下面继续定义,不会报重复的错误。这个i作用域只在 for 这个代码块,i 出来 for 循环就无效了。在下面定义一个i,相当于定义一个新的i。

(2)假设 for 代码块里的变量既可以被循环块使用也可以被外面的输出语句使用,需要 var i int 这样的的话,for 循环里的i相当于在外面定义的,这个作用域就相当一个局部变量了,局部变量是在整个函数体有效,再输出这个i就不会报错。这个i就是 for 循环处理完毕过后i等于的值。if语句也是相同的,这一点与别的编程语言有所区别。重点强调作用域的问题。

相关文章
|
存储 C语言
13 C语言 - 作用域
13 C语言 - 作用域
25 0
|
5月前
|
JavaScript 前端开发
经典面试题【作用域、闭包、变量提升】,带你深入理解掌握!
经典面试题【作用域、闭包、变量提升】,带你深入理解掌握!
|
6月前
|
C++
c++变量作用域
c++变量作用域
57 2
|
6月前
|
C++
C++ 变量作用域
C++ 变量作用域
46 0
|
存储 Java
【Java编程进阶】常量变量及作用域
Java 变量的定义在程序运行期间,此时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元被称为`变量`,定义的标识符就是`变量名`,内存单元中存储的数据就是变量的`值`。
133 0
【Java编程进阶】常量变量及作用域
|
PHP 开发者
全局变量|学习笔记
快速学习全局变量
全局变量|学习笔记
|
PHP 开发者
匿名函数闭包|学习笔记
快速学习匿名函数闭包
匿名函数闭包|学习笔记
|
编译器 C语言 开发者
作用域和链接属性|学习笔记
当变量被定义在程序的不同位置时,它的作用范围是不一样的,这个作用范围就是我们所说的作用域。
115 0
作用域和链接属性|学习笔记
|
存储 自然语言处理 JavaScript
作用域相关的知识点:闭包、执行上下文、LHS/RHS、词法作用域
作用域相关的知识点:闭包、执行上下文、LHS/RHS、词法作用域
131 0
|
Go 开发者
变量作用域|学习笔记
快速学习变量作用域