您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?
我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.
我理解闭包是什么,但我在查找该术语的确切含义时遇到了一些麻烦closure.我已经看过许多网站上使用的术语,但他们很少同意它的实际定义.
有人能告诉我到底是什么意思closure吗?
我有一个问题,我创建的对象看起来像这样:
var myObject = {
AddChildRowEvents: function(row, p2) {
if(document.attachEvent) {
row.attachEvent('onclick', function(){this.DoSomething();});
} else {
row.addEventListener('click', function(){this.DoSomething();}, false);
}
},
DoSomething: function() {
this.SomethingElse(); //<-- Error here, object 'this' does not support this method.
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当我进入'DoSomething'函数时,'this'不会引用'myObject'我做错了什么?
我问了一个关于回调的问题并得出了另一个问题(见评论).闭包与回调有什么不同?
我已经阅读了有关stackflow和其他来源的闭包的前几个主题,有一件事仍然令我感到困惑.从技术上来说,闭包只是包含函数代码和该函数中绑定变量值的数据集.
换句话说,从技术上讲,以下C函数应该是我理解的闭包:
int count()
{
static int x = 0;
return x++;
}
Run Code Online (Sandbox Code Playgroud)
然而,我读到的所有东西似乎暗示闭包必须以某种方式将函数作为第一类对象传递.此外,通常似乎暗示闭包不是程序编程的一部分.这是一个解决方案与它解决的问题过度相关的情况,还是我误解了确切的定义?
我正试图把我的脑袋包裹起来(那里有一个笑话)我跑过去:
(function () { /* do cool stuff */ })();
Run Code Online (Sandbox Code Playgroud)
这是如何运作的?将功能放入parens的目的是什么?之后为什么空荡荡的?
只是一个在调用它的另一个函数之后执行的函数,完成了吗?
请知道(差不多)关于编程的事情,我发现很难找到适当的新手答案或解释这意味着什么.
我可以从stackoverflow专家请求尝试吗?
我使用sailsjs作为节点js的MVC,我还在学习它.我设法从我自己的数据库中获取数据并使用它.
但现在我需要/想要从外部休息api获取数据.我在我的控制器中使用了这个:
// api/controllers/SomeController.js
test : function(res,req){
var j;
var https = require('https');
var options = {
hostname: 'testing.atlassian.net',
port: 443,
path: '/rest/api/2/search?jql=project=ABC',
method: 'GET',
headers: {'Authorization': 'Basic ' + 'SuperSecretLoginAndPassword'}
};
var req = https.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function(d) {
});
});
req.end();
}
Run Code Online (Sandbox Code Playgroud)
变量d显示正确的结果.如何在我的视图中使用请求结果?我搜索了很多,但我无法找到任何方法在我的视图中显示这一点.
这会实时更新吗?因此,如果de rest api中的某些内容发生了变化,我就不必刷新了.
对不起,如果这是愚蠢的.
有人问我 Objective C 块是否更类似于闭包或回调。然而,回调的定义似乎与闭包几乎相同,至少在这个借用自http://swiftspace.org/callback-function-in-swift/的示例中:
\n\nfunc mainFunction(callback: () -> Void) {\n\n // some code\n callback() // call the callback function\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在《编程语言指南》(Swift 2.2)中很少提到回调,但有一个值得注意的例外,回调听起来像是一种闭包:
\n\n\n\n\n\xe2\x80\x9c当闭包\xe2\x80\x99s 类型已知时,例如委托的回调\n,您可以省略其参数类型、返回类型或两者。\xe2\ x80\x9d
\n
帮助?
\n来自维基百科,免费的百科全书:关闭(计算机科学)
在计算机科学中,闭包是在包含一个或多个绑定变量的环境中计算的函数.调用时,该函数可以访问这些变量.闭包的显式使用与函数式编程以及ML和Lisp等语言有关.诸如其他语言中的对象之类的构造也可以使用闭包建模.
要在JavaScript中使用这个,有人能指出一个如何应用这个的例子吗?
在Javascript中,回调函数总是一个闭包?如下所示,反之不是真的[?]:
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
};
var myFunc = makeFunc();
myFunc();
Run Code Online (Sandbox Code Playgroud)
myfunc闭包在哪里,而不是回调.
闭包是从其封闭环境继承变量的函数.当你将函数回调作为参数传递给另一个将执行I/O的函数时,这个回调函数将在稍后调用,并且这个函数将 - 几乎神奇地 - 记住声明它的上下文,以及所有可用的变量在那种情况下和任何父母背景.这一强大功能是Node成功的核心.
来自其他链接:
此外,因为回调的行为就像它们实际上放在该函数中一样,它们实际上是闭包:它们可以访问包含函数的变量和参数,甚至来自全局范围的变量.
当我们将回调函数作为参数传递给另一个函数时,回调是在包含函数体内的某个点执行的,就好像在包含函数中定义了回调一样.这意味着回调是一个闭包.阅读我的帖子,了解更多关于闭包的JavaScript闭包.我们知道,闭包可以访问包含函数的作用域,因此回调函数可以访问包含函数的变量,甚至可以访问全局作用域中的变量.