【问题标题】:JavaScript: Call init function vs. returning that function callJavaScript:调用初始化函数与返回该函数调用
【发布时间】:2011-05-02 23:37:00
【问题描述】:

在提交之前没有仔细考虑这篇文章。道歉。

【问题讨论】:

  • 不用担心。 :) 如果你不问,你仍然会感到困惑。

标签: javascript function return init


【解决方案1】:

您的第二个示例无效:

return{       
        init();
    }

{ ... } 定义了一个必须包含键值对的对象字面量,例如 { foo: 'bar' }

【讨论】:

    【解决方案2】:

    您的第一个示例将执行 init 中的内容并返回 undefined

    您的第二个示例无效。我想你想要:

    return init()
    

    没有花括号。这将返回 init 的结果(您尚未指定)。在这两种情况下,setupmoreSetup 都不会被调用,所以我不确定它们为什么会在那里。

    你遗漏了很多细节,但我现在的回答是:如果调用者需要对init 的结果做某事,你需要使用选项#2。

    【讨论】:

      【解决方案3】:

      没有冒犯的意思,但这似乎是一个有点混乱的问题。正如其他人所指出的,在第二个示例中,您不应该在 init() 周围加上括号。当你说 function setup() { ... } 时,你只是在定义函数,而不是调用它——这意味着在这个例子中函数永远不会被调用。

      但我发布此答案以尝试解决的主要问题是:“调用初始化函数与返回该函数调用”。在第二个示例中认为您正在“返回函数调用”是不正确的。当你说return init()时,首先调用init()并返回一些值,然后你的foo函数返回init()返回的值。

      这就是你应该问的问题。我只是希望foo 调用init,还是希望foo 调用init 并返回init 返回的值?这就是两者之间的区别(一旦其他错误被删除)。

      【讨论】:

        【解决方案4】:

        如果您仍然对使用 init 调用函数的想法感到兴奋,就像我一样 :),那么您可以按如下方式设计您的函数:

        var mainFunction = function() {
          var init = () => {
            functionOne();
            functionTwo();
          }
        
          function functionOne(){
            console.log('I am the first one');
          }
        
          function functionTwo(){
            console.log('I came second?');
          }
        
          return {
           init: init
          };
        }(); // please note the () - call the function here or use
        // mainFunction().init()
        
        mainFunction.init();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-07
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          • 2020-08-30
          • 2013-04-01
          • 2023-03-09
          相关资源
          最近更新 更多