参数变量在JavaScript中创建闭包
Does a parameter variable create closure in JavaScript?
我的任务是追踪我们的一个应用程序中内存泄漏的原因,所以我正在尝试研究闭包。我想知道这个代码是否创建了闭包:
function foo(p)
{
return function(){ return p + 1; }
}
根据我的理解,闭包是在内部函数访问其父函数的局部变量时创建的。参数p
是foo
的本地参数,如果内部函数获得了对p
的访问权限,是否意味着创建了闭包?
函数的参数存在于函数的本地作用域中,因此是的,它会创建一个闭包
是的,这正是这里发生的事情。您返回的内部函数可以通过本地作用域访问参数p
,因此您是正确的。
如果您在返回函数中引用外部函数中的局部变量,它也会创建一个闭包,如下所示:
function foo(p) {
var q = 4;
return function() { return p + q; }
}
这里有一个非常详细的解释:解释JavaScript范围和闭包
这确实创建了一个闭包,但它不是javascript中谈论的典型闭包。典型的例子是:
var adder = function(a) {
return function(b) {
return a + b;
}
}
这样做的目的是让您能够在一个变量中创建一个"闭包"或闭包,以便反复使用。我可以创建一个函数:
var adder4 = adder(4);
现在,如果我想在任何数字上加4,我可以使用adder4(2)
,在这种情况下的结果将是6
。这里发生的是为变量a
插入4
。然后将变量a
永久地包含在此函数中。然后,我们可以随时替换变量b
来创建一个新函数。因此,当我调用函数adder4(2)
时,我使用的是一个已经分配了a
的函数。在这种情况下,变量CCD_ 13被分配给变量b
。很明显,当您添加4
和2
时,您得到的是6
。但是您可以使用相同的函数来添加另一个数字,adder4(3)。现在,它执行相同的逻辑,并为您提供7
。4
仍然是封闭的,或者在"闭包"中,但是您可以自由地替换函数中间的另一个变量。
你也可以在匿名函数和点击处理程序中看到这一点,但你可以在谷歌上找到更好的答案。
希望这能有所帮助。
相关文章:
- 使用闭包创建原型中引用的私有属性
- 如何使用继承创建类似谷歌闭包的结构
- 为什么需要在这个闭包中创建一个变量
- 是否可以在Javascript中创建外部闭包
- React js:为什么我无法创建闭包
- Javascript:是为所有变量创建的闭包,还是只为内部函数可能使用的变量创建的闭包
- 在闭包上创建多个元素的列表器
- 创建带有回调的动态 JSON 数组(内部闭包问题)
- 为什么咖啡脚本创建此闭包
- 我们是否可以使用谷歌闭包创建一个带有复选框和组合框的对话框
- 闭包可以使用new关键字和区别,例如,在创建新对象/类时
- 在javascript中,当原型继承比闭包更适合创建对象时
- 使用闭包创建的私有函数如何访问构造函数中定义的变量
- 无法创建闭包中定义的函数的对象
- 在for循环中创建闭包——我这样做对吗
- 参数变量在JavaScript中创建闭包
- 如何在承诺链中继承数据而不创建闭包
- 如何为必应地图事件创建闭包
- 从已定义的函数创建闭包
- 如何在循环中创建闭包并将其存储在变量中以供以后执行