书上的闭包太晦涩,于是在b站上看了一下关于闭包的讲解,讲的过于简单,而且正确性无法保证,先分享一下:
闭包就是一个函数“捕获”了和它在同一作用域的其他常量和变量。这就意味着当闭包被调用的时候,不管在程序什么地方调用,闭包都能够使用这些常量或者变量。它不关心这些捕获了的变量和常量是否已经超出了作用域,所有只要闭包还在使用它,这些变量就还会存在。
书上的说法比较拗口,需要多读几遍,多理解
闭包是由函数及其相关引用环境组合而成的实体,一般通过在匿名函数中引用外部函数的局部变量或包全局变量构成。
如果函数返回的闭包引用了该函数的局部变量(参数或函数内部变量):
- 多次调用该函数,返回的多个闭包所引用的外部变量是多个副本,原因是每次调用函数都会为局部变量分配内存。
- 用一个闭包函数多次,如果该闭包修改了其引用的外部变量,则每一次调用该闭包对该外部变量都有影响,因为闭包函数共享外部引用。(如果一个函数调用返回的闭包引用修改了全局变量,则每次调用都会影响全局变量)
- 同一个函数返回的多个闭包共享该函数的局部变量。