编程语言
首页 > 编程语言> > Javascript从嵌套函数内部调用外部函数

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