JavaScript: вызов функции init против возврата вызова этой функции - PullRequest
1 голос
/ 31 октября 2010

Не подумал об этом посте перед отправкой.Извинения.

Ответы [ 4 ]

1 голос
/ 31 октября 2010

Ваш первый пример сделает все за init и вернет undefined.

Ваш второй пример неверен. Я думаю, что вы хотели:

return init()

без фигурных скобок. Это вернет результат init (который вы не указали). В обоих случаях setup и moreSetup никогда не звонят, поэтому я не уверен, почему они там.

Вы пропустили много подробностей, но мой ответ прямо сейчас: если вызывающий должен что-то сделать с результатом init, вам нужно будет выбрать вариант # 2.

1 голос
/ 31 октября 2010

Ваш второй пример недопустим:

return{       
        init();
    }

{ ... } определяет литерал объекта, который должен содержать пары ключ-значение, например { foo: 'bar' }.

0 голосов
/ 24 мая 2018

Если вы все еще в восторге от идеи вызова вашей функции с помощью 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();
0 голосов
/ 31 октября 2010

Не обидно, но вопрос кажется несколько запутанным.Как уже отмечали другие, во втором примере не должно быть скобок вокруг init().И когда вы говорите function setup() { ... }, вы просто определяете функцию, а не вызываете ее - это означает, что в этом примере функция никогда не вызывается.

Но главное, что я отправляю этот ответ, чтобы попытаться обратиться к немуэто: «Вызов функции инициализации против возврата вызова этой функции».Неверно думать, что вы «возвращаете вызов функции» во втором примере.Когда вы говорите return init(), сначала вызывается init() и возвращается некоторое значение, а затем ваша функция foo возвращает значение, возвращаемое init().

Так что этот вопрос вы должны задать.Я просто хочу, чтобы foo позвонил init, или я хочу, чтобы foo позвонил init и вернул значение, которое возвращает init?В этом разница между ними (после устранения других ошибок).

...