两个问题:
1.维基百科里写:闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。这句什么意思,能否举个例子?
2.闭包的形成很简单,在执行过程完毕后,返回函数,或者将函数得以保留下来,即形成闭包,函数得以保留下来是什么意思?
两个问题:
1.维基百科里写:闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。这句什么意思,能否举个例子?
2.闭包的形成很简单,在执行过程完毕后,返回函数,或者将函数得以保留下来,即形成闭包,函数得以保留下来是什么意思?
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
下面说明的是JS中的闭包。
1. 不同闭包实例代表用同个函数建立闭包时,因为记忆环境变量的不同,所以会产生不同的闭包实例。
简单的范例,这是回传巢状(内部)函数:
用Chrome除错器看看闭包(Closure)里面有什么,很明显的两个闭包中的包含内容不同(记忆的环境变量不同),是不同的实例。下面为图解:
a函数调用时:
b函数调用时:
2. 函数得以保留下来,是指像巢状(内部)函数会保留下来
像上面的例子中,变量a实际上会是原本函数test中的回传出来内部函数。所以变量a可以进行函数呼叫(调用),而且会记住当时在建立函数的所有记忆到的相关变量x, y等等。
IIFE结构也可以形成闭包的实践,如下面的例子:
维基说的会比较模糊,但在JS中的闭包产生与使用是有一些基本规则,你可以多找找网上文章。