2015-03-05 3 views
0

Я изучаю JavaScript, и я не могу этого понять.Функция внутри функции vs функция возвращает функцию в JavaScript

function Out1() 
{ 
    function In1() 
     { 
      console.log("text inside function In1"); 
     } 
    return In1(); 
} 


function Out2() 
{ 
    return function In2() 
     { 
      console.log("text inside function In2"); 
     }; 
} 

Out1(); // text inside function In1 
Out2(); // 

Out2(); ничего не выводит на консоль. Что я делаю неправильно?

+1

'Out2' возвращает анонимную функцию, которая требует выполнения для получения вашего ожидаемого результата. 'Out2()()' сделал бы это. –

+0

@LinusKleen: Это не анонимно. –

+0

Нет, действительно нет. –

ответ

1

Out2(); ничего не выводит на консоль. Что я делаю неправильно?

Out2 возвращает ссылку на созданную им функцию. Это не звоните эта функция. Вы могли бы назвать его с помощью () на возвращаемой ссылки:

// vv-------- These call `Out2` 
Out2()(); 
// ^^------ These call the function referenced returned by `Out2` 

т.д .:

var f = Out2(); // `f` is now a reference to the `In2` function 
f();   // This calls `In2` 
+0

Спасибо T.J Crowder. Фактически, вы сразу ответили на два вопроса. Первый из них был титульным, а второй (надеюсь, я не ошибаюсь) необходимость() после переменной, которая делает закрытие для получения возврата. – Jonas

Смежные вопросы