1
8
闭包是指某些函数代码中的自由变量被函数“context”绑定到某些值(闭包在这里比context更合适)。
在这里,
现在要创建一个闭包,您必须提供一个值边界上下文:
总之,除非函数返回另一个函数,否则不能有闭包。在这种情况下 函数具有中存在的所有变量值绑定 当它 退出
关于你的例子:
|
2
1
对。 |
3
0
在这些例子中,没有一个闭包被创建。
闭包只是一个函数,它引用了其主体中创建环境中的变量,一个典型的例子是加法器:
|
4
0
如果我可以提供一个关于何时以及如何创建闭包的模型(这个讨论是理论上的,实际上只要最终结果相同,解释器可以做任何事情):每当在执行过程中对函数求值时,都会创建闭包。然后闭包将指向执行的环境。当站点加载时,Javascript在全局环境中按从上到下的顺序执行。所有事件
将转换为带有和的闭包,并带有指向全局环境的指针。同时,一个参考
现在,让我们看一个更复杂的例子:
结果是:
在点(1):来自
在点(2):用变量进行闭包
在第(3)点:发生了一些有趣的事情。首先我们找到了什么
在第(4)点,更有趣的事情发生了。我们首先找到了与
在第(6)点,我们重新分配
P、 对于熟悉LISP或Scheme的用户,上面的模型与LISP/Scheme中的环境模型完全相同。 P、 哇,一开始我想写一个简短的答案,但结果却是这个庞然大物。我希望我没有犯明显的错误。 |
5
0
事实上,经过几年的JavaScript使用和相当深入的研究,我现在有了一个更好的答案: 每当一个函数出现时,就会创建一个闭包。 因为函数只是一个对象,所以我们可以更准确地说,每当函数对象被实例化(函数实例出现),就会创建一个闭包。 所以,
当JS运行完上面的行时,已经有一个闭包,或者
或者
为什么?因为闭包只是一个带有作用域链的函数,所以在上面的每一种情况下,都存在一个函数(它是存在的)。你可以调用它(调用它)。它也有一个范围。所以在我最初的问题中(我是OP),每个案例1到4,都有一个闭包,在每一个案例中。
案例4是一个有趣的案例。在代码运行之后,由于
|
Abhijit Sarkar · 如何修复“闭包可能比当前函数更有效” 2 年前 |
Houman · 如果未调用闭包,如何使XCTest失败? 6 年前 |
Kapil_A · 如何将swift中使用的闭包写入目标c? 6 年前 |
Xendar · Jenkins管道模拟Groovy 6 年前 |
Ibrahim Mohammed · 函数不考虑闭包 6 年前 |