如何将闭包内的值返回到外部范围
How to return a value from within closure to external scope?
我遇到了从一个函数到另一个函数返回值的需要,当这个简单的任务不起作用时,我有一段时间困惑地挠头。然后我意识到我是在闭包函数(或匿名函数?)中操作的,找不到关于如何在这样的函数范围外释放变量的文档。
例如,这不起作用:
function aFunc()
{
var result;
object.event = function(){
result = true;
}
return result;
}
从封闭内部返回也不会。我需要两者都做吗?我尝试在尽可能大的范围内(在所有函数之外)使用全局变量,但这也不起作用。我错过了什么?
我不确定我是否正确地使用了闭包这个词,我指的是匿名函数。
谢谢。
您需要调用闭包:
function aFunc() {
var result;
object.event = function() {
result = true;
};
object.event();
return result;
}
或者,如果它在其他地方运行,这是一个时间问题。你可以有类似的承诺:
function aFunc() {
var promise = { hasRun: false, result: null };
object.event = function() {
result.hasRun = true;
result.result = true; // or something else...
};
return promise;
}
// check if it has run and get the result:
if (promise.hasRun) {
// access promise.result
}
但是,一个简单的回调就足够了。既然您提到了XMLHttpRequest
对象,那么您应该能够将回调附加到其onreadystatechange
事件,或者将回调传递到aFunc
:
function aFunc(callback) {
object.event = function() {
var result = true;
callback(result);
};
}
然后,您的回调将在可用时被调用并得到结果。
您可以将对象传递给闭包,当调用函数时,它将设置闭包的属性"result"。
function aFunc (foo) {
object.event = function() {
foo.result = true;
}
}
问题是result
的值是由aFunc
返回的,而不是对它的引用,这意味着在闭包内部发生的result
的任何后续更改都不会影响之前返回的result
。
这是不可能的;代码
object.event = function(){
result = true;
}
实际上并没有执行result = true;
,它只是定义了一个将result
设置为true
的函数。在调用函数之前使用result
会产生一个未定义的值。
有两种解决方案:
你可以使用一个容器(按照Qnan的建议)
您可以使用回调。
第二种方法意味着:不要立即使用result
,而是让object.event
后面的函数在result
有一些有用的值时立即调用您的一些代码:
object.event = function(){
result = true;
callback(result);
}
相关文章:
- 使用在函数外部声明的变量的 Javascript 返回值 + undefined
- 将外部函数返回的id传递给内部函数
- 如何将闭包内的值返回到外部范围
- 返回日期的外部 JavaScript
- Javascript,闭包中的返回函数如何与外部函数连接
- 从外部函数(数组)了解返回函数(x)
- 单击旋转木马外部返回主页
- 我从闭包返回的函数在外部范围内是否可用
- 在异步内部函数返回 [UI-路由器和 HTML 服务] 之后返回外部 fn
- 内部链接返回空错误,我在 Javascript 中找不到错误.外部链接工作得很好
- 抓取外部网站,但返回“您必须在此站点上使用支持 JavaScript 的浏览器”错误
- HTML 从外部 JavaScript 文件触发函数并返回 cookie
- 在 Javascript 中为外部函数返回一个函数
- 为什么 javascript 会保留在外部函数中发生的局部变量重新分配,而不必捕获返回值
- JQuery 移动版 - 链接到外部站点,无法使用浏览器后退按钮返回页面
- 如何在内部异步函数完成运行后调用外部函数返回
- 如何使用从 javascript 中的函数返回的外部库对象的属性
- 使用内部函数返回到外部函数的必要性是什么
- 如何返回外部样式表类应用于元素的所有CSS属性(不获取计算样式!)
- 从内部函数返回外部函数