Javascript闭包;是返回强制
Javascript closure; is the return manatory?
我试图学习这个概念,但我不确定回报。 目前在我看到的示例中(其中许多看起来像下面)这是关闭,但我不明白为什么我应该返回计数器,它是强制性的还是不是关闭的?
function makeCounter() {
var count = 0;
function counter() {
count = count + 1;
return count;
}
return counter;
}
喜欢这个
function makeCounter() {
var count = 0;
function counter() {
count = count + 1;
return count;
}
}
更新 - makeCounter 仍然是 clousre
function makeCounter() {
var count = 0;
function counter() {
count = count + 1;
return count;
}
return counter;
var count2 = 0;
function counter2() {
count2 = count2 + 1;
return count2;
}
}
在您的特定示例中,您必须返回本地函数counter
才能创建闭包。
在第二个代码示例中,makeCounter()
不返回任何内容,因此不会创建闭包。 事实上,makeCounter()
甚至什么都不做,因为counter()
从来没有被调用过。
如果您查看如何使用第一个示例中的makeCounter()
,它将如下所示:
var myCntr = makeCounter();
var firstCnt = myCntr();
var secondCnt = myCntr();
仅从预期的用法来看,很明显,makeCounter()
必须返回一个函数才能有用。
Javascript 中的闭包是在函数本身完成执行很久之后,当某些代码继续保留对函数作用域中任何内容的引用时创建的。 这可以通过从函数返回本地函数来实现,如第一个代码示例所示。 或者,当存在可以在将来某个时间调用的异步回调函数或事件处理程序包含在函数中时,可能会发生这种情况。
因此,在此示例中:
function makeCounter() {
var count = 0;
function counter() {
count = count + 1;
return count;
}
return counter;
}
var myCntr = makeCounter();
仍在作用域中的 myCntr 变量和活变量包含对内部 counter()
函数的引用,而该函数又包含对 makeCounter()
中内部作用域变量的引用。 这种对内部作用域的持久引用告诉 JS 解释器和垃圾回收器,makeCounter()
本地作用域不能进行垃圾回收,并且会持续存在。 这个概念称为闭包。
一种对我来说很有效的简单思考方式是只从垃圾收集的角度来考虑它。 在 JS 中,当没有代码仍然引用该变量并且因此任何内容都不能再使用该变量时,变量有资格进行垃圾回收。 函数作用域也是如此。 如果您将函数作用域视为进行垃圾回收的对象,则仅当没有仍在运行但仍具有对它的引用的代码时,才能对函数作用域进行垃圾回收。 返回内部函数并将该返回值存储到变量中会创建对该内部作用域的引用,因此只要该变量本身仍然存在,那么函数作用域就不能被垃圾回收,并且将继续处于活动状态。 这个概念称为闭包。 它并不存在于所有语言中,但在Javascript中是一个非常有用的功能。
>函数counter
是要makeCounter
的局部函数。您不能在 makeCounter
范围内调用该函数。
counter
中的返回将count
值返回到 makeCounter
的范围。因此,您需要一个返回值,就像在第一个示例中一样,然后从 makeCounter
返回值。
- 如何将闭包内的值返回到外部范围
- Javascript,闭包中的返回函数如何与外部函数连接
- JavaScript闭包和返回数组元素
- 为什么这个闭包返回函数
- 我从闭包返回的函数在外部范围内是否可用
- 闭包出错 - 为什么匿名函数最后返回
- (仍然)对JavaScript闭包,ajax和返回值有更多的困惑
- Javascript闭包;是返回强制
- Javascript 闭包返回函数
- 闭包:在函数返回后,如何使局部变量保持活动状态
- 与闭包混淆以及返回错误值的原因
- 简单闭包与具有嵌套函数返回的闭包
- Javascript闭包保持返回一个函数,但应该是一个字符串
- 闭包没有返回任何内容
- JavaScript闭包:返回不理解的值
- 即使在外部函数返回后,闭包如何访问外部函数的变量
- 返回数组的闭包
- 自调用函数返回闭包.这是干什么用的?
- 递归闭包返回什么?
- 在JavaScript中实现自动记忆(返回闭包函数)