闭包的基本介绍|学习笔记

简介: 快速学习闭包的基本介绍

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

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


闭包的基本介绍

内容介绍:

一、介绍

二、案例演示


一、介绍

1.闭包就是一个函数和与其相关的引用环境组合的一个整体(实体)。闭包的本质是一个函数,但是这个函数会用到函数外的一些变量,共同组成一个整体,这个整体就是闭包。

2.做开发的时经常需要用到闭包。

二、案例演示

1、新建一个文件 main.go,func main主函数,累加器

用一个变量接收 AddUpper,返回一个函数。

package main

import (

"fmt"

)

//累加器

func Addupper() func (int) int f

var n int = 10

return func (x int) int i

n = n+x

return n

}

}

func main() {

//使用前面的代码f := Addupper(

fmt.Println(f(1))//11

fmt.Println(f(2))//13

fmt.Println(f(3))/ 16

}

如果输出fmt.Println(f(1))中的1改成2会输出13

image.png

2、对上面代码的说明和总结

1.AddUpper 是一个函数,返回的数据类型是 fun (int) int

2.闭包的说明

var n int = 10 这段代码准确的说就是闭包,返回的是一个函数。

var n int = 10

return func (x int) int i

n = n+x

return n

}

返回的是一个匿名函数,但是这个匿名函数引用到函数外的n,因此这个匿名函数和n形成一个整体,构成闭包。

3.闭包是类,函数是操作,n是字段。函数和它使用到n构成闭包。

4.当反复的调用f函数时,因为n是初始化一次,因此每调用一次就进行累计。

5.闭包的关键,就是要分析出返回的函数它使用(引用)到哪些变量,因为函数和它引用到的变量共同构成闭包。分析清楚后就理解了函数和哪些变量构成了闭包。闭包本质就是函数和它引用的类型构成一个整体,当它反复调用时,它引用的变量不会每次都初始化,而是不停的累加。

6.对上面代码的一个修改,加深对闭包的理解

//累加器

func Addupper( )func (int) int {

var n int = 10

var str = "hello”

return func (x int) int {

n= n+ x

str +=string(36)// =>36 ='$'

fmt.Println( "str=", str)//  1.str="hello$"

str="hello$$”3. str="hello$$$"

return n

}

}

func main() {

//使用前面的代码

f := Addupper()

fmt.Println(f(1))// 11

fmt.Println(f(2))// 13

fmt.Println(f(3))// 16

}

写一个 str 初始化 hello,当第一调用时输出11,第一次调用是 str=hello1,第二次调用会输出 str=hello2,第三次在后面加了个3。返回的函数和外面引入的变量共同构成一个闭包,当每次调用闭包时,变量不会再初始化,而是在原先的基础上变化,因为它们是一个整体。

image.png

问:为什么会出现这种字符?

答:因为整数1会转成 ascis 码。str +=string(36)对应的字符是$。

image.png

相关文章
|
2月前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
5月前
|
C++ Python
Python闭包概念该怎么理解
Python闭包概念该怎么理解
24 0
|
5月前
|
Go
Go语言进阶篇——浅谈函数中的闭包
Go语言进阶篇——浅谈函数中的闭包
|
6月前
|
算法 Linux C++
【C++入门到精通】C++入门 —— 深浅拷贝函数
是C++中的一个特殊成员函数,用于创建对象的副本。它的作用是通过使用已有对象的属性值来初始化新对象,实现对象的复制操作。通过定义拷贝构造函数,我们可以控制对象的拷贝过程,并确保正确处理含有指针或动态分配内存的类。
57 0
|
安全 编译器 程序员
深入浅出闭包
深入浅出闭包
55 0
|
Python
Python编程 闭包
Python编程 闭包
67 0
|
分布式计算 大数据 Serverless
高级特性_闭包_概念 | 学习笔记
快速学习 高级特性_闭包_概念
高级特性_闭包_概念 | 学习笔记
|
前端开发
前端学习案例-闭包理解1-简单理解
前端学习案例-闭包理解1-简单理解
73 0
|
开发者 Python
闭包的概念 | 学习笔记
快速学习闭包的概念
|
自然语言处理 JavaScript 前端开发
每日一题:说说你对闭包的理解?闭包使用场景
每日一题:说说你对闭包的理解?闭包使用场景
115 0