各种笔记
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

1.3 KiB

闭包

概念: 闭包是由函数及其引用环境组合而成,一般通过在匿名函数中引用外部函数的局部变量或全局变量构成
所以: 闭包=函数 + 引用环境
闭包对闭包外的环境引入是直接引用,编译器检测到闭包,会将闭包使用的外部变量分配到堆上
如果函数返回的闭包使用了该函数的局部变量(参数或函数内部变量):
    1. 多次调用该函数,返回的多个闭包所引用的外部变量是多个副本, 原因是每次调用函数都会为局部变量分配内存
    2. 用一个闭包函数多次, 如果该闭包修改了其使用的外部变量, 则每一次调用改闭包对该外部变量都有影响,因为闭包函数共享外部引用
    
如果一个函数调用返回的闭包使用全局变量,则每次调用都会影响全局变量
如果函数返回的闭包引用的是全局变量a,则多次调用该函数返回的多个闭包引用的都是同一个a, 同理调用一个闭包多次用的也是同一个a,此时如果闭包
中修改了a值的逻辑则每次闭包调用都会影响全局变量a的值, 使用闭包的目的是为了减少全局变量,所以闭包引用全局变量不是好的编程方式。
同一个函数返回的多个闭包共享该函数的局部变量