- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
嘿,我在 youtube 上看到了这个视频 http://www.youtube.com/watch?v=KRm-h6vcpxs
基本上解释了 IIFE 和闭包。但我不明白的是我是否需要返回一个函数才能将其称为闭包。
例如
function a() {
var i = 10;
function b() {
alert(i);
}
}
在这种情况下,我可以将其称为闭包,因为它正在从外部函数的范围访问“i”变量,还是我需要像这样返回函数
return function b(){alert(i);}
最佳答案
闭包只是一个函数,它保持着它的词法环境,直到它自己死了才让它离开。
将闭包想象成守财奴叔叔:
史高治叔叔是个守财奴。他永远不会放弃他的钱。
同样,闭包也是一个守财奴。它不会放弃它的变量,直到它自己死去。
例如:
function getCounter() {
var count = 0;
return function counter() {
return ++count;
};
}
var counter = getCounter();
看到函数 counter
了吗? getCounter
函数返回的那个?该功能是一个守财奴。它不会放弃 count
变量,即使 count
变量属于 getCounter
函数调用并且该函数调用已经结束。因此,我们将 counter
称为闭包。
看到每个函数调用都可能创建变量。例如,调用 getCounter
函数会创建一个变量 count
。现在这个变量 count
通常会在 getCounter
函数结束时消失。
但是 counter
函数(可以访问 count
变量)不允许它在调用 getCounter
结束时结束。这是因为 counter
函数需要 count
。因此它只允许 count
在它自己死后死掉。
现在需要注意的真正有趣的事情是 counter
是在对 getCounter
的调用中产生的。因此,当对 getCounter
的调用结束时,甚至 counter
也应该死掉——但它没有。它甚至在调用 getCounter
结束后仍然存在,因为它脱离了 getCounter
的范围(生命周期)。
counter
可以通过多种方式逃脱getCounter
的范围。最常见的方法是让 getCounter
简单地返回 counter
。然而,还有更多的方法。例如:
var counter;
function setCounter() {
var count = 0;
counter = function counter() {
return ++count;
};
}
setCounter();
这里 getCounter
的姊妹函数(恰本地称为 setCounter
)将一个新的 counter
函数分配给全局 counter
变量。因此,内部 counter
函数脱离了 setCounter
的范围,成为一个闭包。
实际上在 JavaScript 中每个函数都是一个闭包。然而,直到我们处理逃离父函数范围的函数时,我们才意识到这一点并且即使在对父函数的调用结束后,仍然保持属于父函数的一些变量仍然存在。
有关更多信息,请阅读此答案:https://stackoverflow.com/a/12931785/783743
关于javascript - 函数返回是否需要被称为闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16586950/
以下闭包函数在 javascript 中运行良好。 function generateNextNumber(startNumber) { var current = startNumber;
Swift的闭包(Closures)是一种将功能块和上下文整合并演示在代码中的一种手段。闭包可以捕获并存储其上下文中的变量和常量。与普遍存在于其他语言的匿名函数(如Python的lambda、Java
在本教程中,您将借助示例了解 JavaScript 闭包。 在了解闭包之前,您需要了解两个概念: 嵌套函数 返回函数 JavaScript 嵌套函数 在 JavaScript 中,一个函数也可
在本教程中,您将借助示例了解 JavaScript 闭包。 在了解闭包之前,您需要了解两个概念: 嵌套函数 返回函数 JavaScript 嵌套函数 在 JavaScript 中,一个函数也可
闭包介绍 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 要理解闭包,首先必须理解Javascript特殊的变量作用域。 1.全局变量和局部变
这个问题已经有答案了: Methods in ES6 objects: using arrow functions (6 个回答) 已关闭 6 年前。 我已经在 stackoverflow 上到处查找
这个问题已经有答案了: How do JavaScript closures work? (86 个回答) 已关闭 9 年前。 我有一个关于 Javascript 闭包的简单问题: 给出了以下函数:
所以我有以下内容: Object a = data.getA(); Object b = data.getB(); Object c = data.getC(); // and so on 这些对象是
现在已经很晚了,我大脑中道格拉斯·克罗克福德居住的部分已经关闭。我尝试了一些方法,但没有达到预期效果。 我有一个 Canvas ,我在其中画了两条线,然后在计时器上淡出它们,但只有循环中的最后一行淡出
因此,我创建了一个变量 car,然后将其分配给一个函数并添加了参数模型、年份。然后在函数内引用参数创建一个对象。 然后创建“闭包”内部函数 yourCar() 并返回其中的外部函数对象“Propert
我正在 Mozilla 开发者网站上阅读关于关闭的解释,并且有点挣扎。请查看 Mozilla 网站上的以下代码。我有点理解它是如何工作的,但我认为我的评论下面的代码也应该工作。为什么一点击18、20就
这个问题在这里已经有了答案: UnboundLocalError trying to use a variable (supposed to be global) that is (re)assig
以下程序返回“本地”,根据我正在阅读的教程,它旨在演示闭包现象` 我不明白的是,为什么最后为了调用parentfunction,将其分配给变量“child”,然后调用“child”。 为什么只写 pa
我读到闭包末尾的()会立即执行。那么,这两者之间有什么区别。我在一些代码中看到了第一个用法。 谢谢。 for (var a=selectsomeobj(),i=0,len=a.length;i
代码如下 var collection = (function (){ var x = 0; return {
我仍然对 JavaScript 中的闭包概念感到困惑。我明白闭包是内部函数在母函数返回后访问在其母函数中创建的变量的能力。但是我仍然很困惑,如果我们可以在函数内部创建一个变量,为什么我们必须创建内部函
我搜索了很多主题并没有找到答案,或者问题太复杂了。所以没关系。这是我的第一个问题。 这是 SQL SELECT parent.*, ( SELECT COUNT(*) FROM
有 JS 高手可以解释为什么会这样吗: $$={} (function(x){ x.newModule = { func: function(){...} };
在此示例中,我尝试按值传递,但传递的是引用。 for (int i = 0; i new PhoneJobTest(i); t.Start(); } 这可以像这样补救: for (int
从 $.each() 中访问 this.rules 变量的最佳方式是什么?任何关于原因/方式的解释也会有帮助! app.Style = function(node) { this.style
我是一名优秀的程序员,十分优秀!