【发布时间】:2011-05-02 23:37:00
【问题描述】:
在提交之前没有仔细考虑这篇文章。道歉。
【问题讨论】:
-
不用担心。 :) 如果你不问,你仍然会感到困惑。
标签: javascript function return init
在提交之前没有仔细考虑这篇文章。道歉。
【问题讨论】:
标签: javascript function return init
您的第二个示例无效:
return{
init();
}
{ ... } 定义了一个必须包含键值对的对象字面量,例如 { foo: 'bar' }。
【讨论】:
您的第一个示例将执行 init 中的内容并返回 undefined。
您的第二个示例无效。我想你想要:
return init()
没有花括号。这将返回 init 的结果(您尚未指定)。在这两种情况下,setup 和 moreSetup 都不会被调用,所以我不确定它们为什么会在那里。
你遗漏了很多细节,但我现在的回答是:如果调用者需要对init 的结果做某事,你需要使用选项#2。
【讨论】:
没有冒犯的意思,但这似乎是一个有点混乱的问题。正如其他人所指出的,在第二个示例中,您不应该在 init() 周围加上括号。当你说 function setup() { ... } 时,你只是在定义函数,而不是调用它——这意味着在这个例子中函数永远不会被调用。
但我发布此答案以尝试解决的主要问题是:“调用初始化函数与返回该函数调用”。在第二个示例中认为您正在“返回函数调用”是不正确的。当你说return init()时,首先调用init()并返回一些值,然后你的foo函数返回init()返回的值。
这就是你应该问的问题。我只是希望foo 调用init,还是希望foo 调用init 并返回init 返回的值?这就是两者之间的区别(一旦其他错误被删除)。
【讨论】:
如果您仍然对使用 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();
【讨论】: