Javascript从嵌套函数内部调用外部函数
作者:互联网
我认为应该解决的一个相对困难的问题是主要痛苦…我正在尝试做的事情:
a.b("param", function(data)
{
logger.debug("a.b(" + data.toString() + ")");
if (data.err == 0)
{
// No error, do stuff with data
}
else
{
// Error :( Redo the entire thing.
}
});
我的解决方法是尝试:
var theWholeThing = function() {return a.b("param", function(data)
{
logger.debug("a.b(" + data.toString() + ")");
if (data.err == 0)
{
// No error, do stuff with data
}
else
{
// Error :( Redo the entire thing.
theWholeThing();
}
})};
上面的问题是,前者可以正常工作(除非发生错误时不处理),后者根本不输出日志消息……好像“ theWholeThing()”调用不起作用一样,我认为应该(再次调用整个内容).
这里一定有一些微妙的错误,有什么提示吗?
谢谢!
解决方法:
首先,直接回答您的问题,听起来好像您忘记了第一次真正调用该函数.尝试:
var theWholeThing = function() {return a.b("param", function(data)
{
logger.debug("a.b(" + data.toString() + ")");
if (data.err == 0)
{
// No error, do stuff with data
}
else
{
// Error :( Redo the entire thing.
theWholeThing();
}
})};
theWholeThing(); // <--- Get it started.
但是,可以通过命名的IIFE(立即调用的函数表达式)更优雅地实现这一点:
// We wrap it in parentheses to make it a function expression rather than
// a function declaration.
(function theWholeThing() {
a.b("param", function(data)
{
logger.debug("a.b(" + data.toString() + ")");
if (data.err == 0)
{
// No error, do stuff with data
}
else
{
// Error :( Redo the entire thing.
theWholeThing();
}
});
})(); // <--- Invoke this function immediately.
标签:nested-function,function-calls,javascript,function 来源: https://codeday.me/bug/20191031/1976710.html