Javascript 嵌套回调 API - 出类拔萃

Javascript nesting callback API - out of my league

提问人:John-L_. 提问时间:10/7/2023 最后编辑:Mark RotteveelJohn-L_. 更新时间:10/9/2023 访问量:31

问:

我正在尝试使用回调来封装 API 解决方案,如下所示:

<html>
    <script>
        function main ( CB ) {
            function msg ( s ) {
                window.alert(s);
            }
            CB();
      }
    </script>
    <script>
        main( function () {
           msg("Hello universe"); // <--here
            } );
    </script>
</html>

并且 Javascript 抛出错误“未定义 msg”。我看到了问题,但不清楚如何解决它。我晃了晃身子,试着在标有“<--这里”的那一行,但结果差不多。main.msg(...)this.msg(...)

JavaScript 回调

评论

2赞 Daniel A. White 10/7/2023
你必须将 msg 传递给 cb
0赞 Bergi 10/7/2023
封装 API 解决方案”是什么意思?你为什么需要?为什么不直接放进全球范围呢?你的实际代码是什么?mainmsg

答:

2赞 Chris Barr 10/7/2023 #1

基本上,您只需要:

  • 上半场:传球msgCB() --> CB(msg)
  • 在下半部分:get 作为参数从msgmain --> main(function (msg) {...

但是,由于无论如何它已经有点令人困惑,我认为稍后命名函数和参数会增加潜在的混淆。此外,也不需要两个单独的标签。msg<script>

在这里,它被清理了一下,我重命名了一些东西以帮助使其更清晰

function main (callbackFn) {
  function msgFn(str) {
      window.alert(str);
  }
  callbackFn(msgFn);
}

main(function (myFunc) {
   myFunc("Hello universe");
});